如何从 swift 中的父 viewcontroller 修改子 viewcontroller 的对象

How to modified object of child viewcontroller from parent viewcontroller from in swift

我想修改子 UIViewController 的对象,但它不起作用。谁能解决我的问题?非常感谢~~

下面是我的代码

我的ViewControllerclass:

import UIKit

class ViewController: UIViewController { 

    var x:UIView?
    override func viewDidLoad() {
        super.viewDidLoad()

        var sec = second()
        sec.x?.backgroundColor = UIColor.redColor()
        view.addSubview(sec.view)
        self.addChildViewController(sec)

    }

}

我的secondclass:

class second:UIViewController{

    var x:UIView!
    override func viewDidLoad() {
        super.viewDidLoad()

        x = UIView(frame: CGRectMake(55, 55, 100, 100))
        x!.backgroundColor = UIColor.greenColor()
        self.view.addSubview(x!)

    }

}

初始化第二个视图控制器后,调用addChildViewController(instanceOfSecondVC) 并将其添加为子视图后,调用 sec.didMoveToParentViewController(self)。 所以你的代码将是这样的:

    import UIKit

class ViewController: UIViewController { 

    var x:UIView?
    override func viewDidLoad() {
        super.viewDidLoad()

        var sec = second()
addChildViewController(sec)
        sec.x?.backgroundColor = UIColor.redColor()
        view.addSubview(sec.view)
        self.addChildViewController(sec)
sec.didMoveToParentViewController(self)

    }

}

发生这种情况是因为当您尝试设置其背景颜色时视图可能为零。只需在第二个视图控制器中添加背景颜色 属性 并进行设置。然后在 viewDidLoad 里面设置第二个视图控制器的背景颜色。 像这样

class ViewController: UIViewController { 

    var x:UIView?
    override func viewDidLoad() {
        super.viewDidLoad()

        var sec = second()
        sec.backColor = UIColor.redColor()
        view.addSubview(sec.view)
        self.addChildViewController(sec)
    }
}

然后:

class second:UIViewController {
    var backColor = UIColor.greenColor()
    var x:UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        x = UIView(frame: CGRectMake(55, 55, 100, 100))
        x.backgroundColor = backColor
        self.view.addSubview(x)
    }
}