如何从swift中的父视图控制器修改子视图控件的对象

时间:2015-07-24 04:58:30

标签: swift object viewcontroller

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

下面是我的代码

我的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) } } 课程:

second

我的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!) } } 课程:

{{1}}

2 个答案:

答案 0 :(得分:0)

初始化第二个视图控制器后,请致电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)

    }

}

答案 1 :(得分:0)

这种情况正在发生,因为当您尝试设置其背景颜色时,视图可能为零。只需在第二个视图控制器中添加背景颜色属性并进行设置即可。然后在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)
    }
}