两个或多个ViewController之间共享的通用视图

时间:2015-08-03 15:34:42

标签: ios swift uiview uiviewcontroller

我是IOS和Swift环境的新手(我不想知道OBJ-C)。我试图理解一个概念,但无法找到任何代码示例 在工作中看到这个概念。而且我不知道如何去做。

  • 据我所知,View是一个通用组件。

  • 由于View是一个通用组件,因此可以由一个或多个ViewControllers访问。

  • 视图使用协议公开其功能。

示例:

我们有2个ViewControllers:

ViewControllerOne

ViewControllerTwo

我们有1个视图

ViewGeneric

Fig.1

在这里,ViewGeneric是一个通用组件,并公开其三个功能,

  1. 更改背景颜色

  2. 更改标签文字

  3. 更改文字的字体颜色

  4. 现在我希望ViewControllerOne能够使用该功能更改视图背景的颜色和

    ViewControllerTwo使用该功能更改文本的标签文本和字体颜色。显然是一次一个。

    就像我在这里重用ViewGeneric一样。

    请在Swift中提供一个小的工作示例代码....如果有人能帮助我理解如何去做,我将非常感激。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做你想要的,但这是你所要求的简单方法。首先创建新的自定义UIView:

import UIKit

class MyGenericView: UIView {

    var myLabel: UILabel!

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.myLabel = UILabel()

        // e.g.
        self.myLabel.frame = CGRectMake(0, 0, self.frame.size.width, 20)
        addSubview(myLabel)
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

然后您可以在不同的视图控制器中使用此视图:

import UIKit

class ViewController1: UIViewController {

    var myGenericView: MyGenericView!

    override func viewDidLoad() {
        super.viewDidLoad()

        myGenericView = MyGenericView(frame: CGRectMake(0, 0, 100, 100))
        myGenericView.backgroundColor = UIColor.redColor()
        myGenericView.myLabel.text = "ViewController1 text"

        self.view.addSubview(myGenericView)
    }
}

另一个视图控制器中的相同视图:

import UIKit

class ViewController2: UIViewController {

    var myGenericView: MyGenericView!

    override func viewDidLoad() {
        super.viewDidLoad()

        myGenericView = MyGenericView(frame: CGRectMake(0, 0, 100, 100))
        myGenericView.backgroundColor = UIColor.whiteColor()
        myGenericView.myLabel.textColor = UIColor.blackColor()
        myGenericView.myLabel.text = "ViewController2 text"

        self.view.addSubview(myGenericView)
    }

}

在这种情况下,理解的重要是“addSubview”方法,该方法采用UIView并将其添加为当前视图的“子视图”(或子视图)。这将创建一个具有父子关系的视图层次结构,这意味着 - 如果父项移动,则子项随父项移动。