为啥我不能从不同的 ViewController 视图设置视图?

Posted

技术标签:

【中文标题】为啥我不能从不同的 ViewController 视图设置视图?【英文标题】:Why can't I set a view from a different ViewController view?为什么我不能从不同的 ViewController 视图设置视图? 【发布时间】:2015-02-26 19:39:03 【问题描述】:
@IBOutlet weak var containerView: UIView!

override func viewDidLoad() 
    super.viewDidLoad()

    let storyboard = UIStoryboard(name: "LinkDetail", bundle: nil)
    var vc : UIViewController = storyboard.instantiateViewControllerWithIdentifier("red") as UIViewController
    containerView = vc.view
    println(vc.view)
    

我知道我在情节提要中将视图控制器 ID 设置为“红色”。当我 println 的输出是:

<UIView: 0x7fbdc1e5a820; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7fbdc1e491b0>>

所以视图一定是正确的。那么为什么我不能用我从代码中获得的视图来替换我的 containerView UIView 插座呢?

【问题讨论】:

您的 containerView IBOutlet 设置是否正确?视图的限制是什么?尝试设置 containerView 的背景颜色,使其从您的主视图中脱颖而出,并确保它可见并具有适当的大小 containerView.addSuvview(vc.view) 【参考方案1】:

这是因为您没有在任何地方持有对 vc(红色)视图控制器的引用。 containerView 设置为弱,因此没有任何内容会保留设置在其上的视图。

我认为在这种情况下你应该使用Child View Controllers。

使用您的 sn-p,这是您将视图控制器添加为子项的方式:

override func viewDidLoad() 
    super.viewDidLoad()

    let storyboard = UIStoryboard(name: "LinkDetail", bundle: nil)
    var vc : UIViewController = storyboard.instantiateViewControllerWithIdentifier("red") as UIViewController
    self.addChildViewController(vc)
    self.view.addSubview(vc.view)
    containerView = vc.view

    vc.didMoveToParentViewController(self)

【讨论】:

【参考方案2】:
// containerView = vc.view
containerView.addSuvview(vc.view)

【讨论】:

你的意思是containerView.addSubviewb

以上是关于为啥我不能从不同的 ViewController 视图设置视图?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能同时从 Java 执行不同的 Matlab 函数?

为啥我不能从不同命名空间中的朋友类更改类的私有成员?

从侧面菜单 Segue 主 ViewController

为啥 Linux live CD 可以从不同的电脑启动,但安装的系统不能? [关闭]

为啥自动布局不能产生一致的结果?

ios从不同的类回调viewController