访问容器视图控制器

6

我有一个简单的ViewController,其中包含一个TableViewController的容器视图。 在ViewController中,我从外部API加载数据,并且其中一部分数据需要传递到容器中的TableViewController。

有没有什么方法可以做到这一点? 谢谢!

1个回答

14

从父控制器可以通过self.childViewControllers访问包含在容器视图中的控制器。如果只有一个,则它将位于self.childViewControllers [0]。


注意:关于RD在下面评论中解释的出色技巧;这里是一个经过测试且有效的典型示例:这只需放置在整个场景的VC中。只需单击转场本身(即连接箭头中间的小符号)即可设置文本标识符。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
    if ([segue.identifier isEqualToString:@"containerLogin"])
        self.vcLogin = (LoginVC *)segue.destinationViewController;

    if ([segue.identifier isEqualToString:@"containerStartNew"])
        self.vcStartNew = (StartNewVC *)segue.destinationViewController;

    }

以下是如何在Swift中完成它的方式:(您必须小心处理解包器)

override func prepareForSegue(segue:(UIStoryboardSegue!), sender:AnyObject!)
    {
    if (segue.identifier == "feedContainer")
        {
        feed = segue!.destinationViewController as! Feed
        feed.someFunction()
        }
    }

RD,如果有多个,该怎么办?你怎么知道哪个是哪个?有什么想法吗? - Fattie
2
@JoeBlow,您可以检查返回的控制器的类来确定哪个是哪个。您还可以在prepareForSegue中分配控制器,而不是像我在答案中所说的那样进行分配(嵌入式控制器将是segue.destinationViewController)。该方法用于嵌入式控制器,因此您可以实现它,并检查segue的标识符以了解哪个控制器是哪个。这可能是更好的方法,特别是如果您有多个子项。 - rdelmar
我在stackoverflow上问了一个关于“其他”方法中数组顺序的问题.. http://stackoverflow.com/questions/23597123/in-fact-is-destinationviewcontroller-in-storyboard-order - Fattie
@rdelmar 我知道这是一个旧问题,但我会尝试回答。我怎样才能做到相反的操作呢?也就是说,我怎样能从"容器视图"中访问"视图控制器"? - Horray
我像这样分配了它:self.theMainViewController = (theMainViewController *)self.parentViewController; 然后在另一个已被调用的方法中,我nsloged它,结果却是nil。 - Horray
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接