Swift - 在addSubview之后从父级访问子标签文本

时间:2015-08-11 10:04:21

标签: swift

您有一个应用程序,使用以下命令向父级添加多个子视图(UIViews):

if let page:UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("recentVC") as? RecentViewController {
   page.view.frame = self.frame
   scrollView.addSubview(page.view)
}

在RecentViewController中,我有许多元素(标签,图像视图等)。我想从父视图控制器设置这些。这是否可能,如果有的话,是否有任何资源?

我一直在搜索,但我只能在使用segue时找到信息。

由于

2 个答案:

答案 0 :(得分:1)

由于您使用的是storyboard,您可以通过将它们从storyboard拖动到视图控制器类来为RecentViewController中的视图创建引用插座。然后,您可以直接访问这些属性,如下所示:

if let page = self.storyboard?.instantiateViewControllerWithIdentifier("recentVC") as? RecentViewController {
    page.view.frame = self.frame
    page.someChild.image = someImage // raw example
    self.recentViewController = page
    scrollView.addSubview(page.view)
}

答案 1 :(得分:0)

您完成了大部分工作,在父视图控制器中创建属性以保留子视图控制器。

if let page = self.storyboard?.instantiateViewControllerWithIdentifier("recentVC") as? RecentViewController {
    page.view.frame = self.frame
    self.recentViewController = page
    scrollView.addSubview(page.view)
}

现在,您可以使用self.recentViewController.<childControl>访问子视图控制器中的任何内容。

重要提示:设置此类父子关系时,应使用Creating Custom Container View Controllers

中的方法
if let page = self.storyboard?.instantiateViewControllerWithIdentifier("recentVC") as? RecentViewController {
    self.recentViewController = page
    self.addChildViewController(page)

    page.view.frame = self.frame
    scrollView.addSubview(page.view)

    page.didMoveToParentViewController(self)
}

我知道这看起来很神秘且不必要,但它将来会阻止奇怪的几乎无法追查的问题。

哦,如果你需要删除子视图

self.recentViewController.willMoveToParentViewController(nil)
self.recentViewController.view.removeFromSuperview()
self.recentViewController.removeFromParentViewController()