我的 storyboard 设置如下:
V1ViewController
UITableViewController
带有一组静态单元格我正试图从V1ViewController
中的代码访问左侧详细信息中的文本框,但似乎无法弄清楚如何遍历该层次结构。任何帮助将不胜感激。
答案 0 :(得分:3)
这是获取子视图控制器引用的正确方法:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString: @"childViewControllerSegue"]) {
ChildViewController *myChildViewController = (ChildViewController *) [segue destinationViewController];
//With myChildViewController you can access your child view controller for example:
[myChildViewController.myTableView reloadData];
}
}
请记住,因为这是一个Container视图,所以在加载ViewController
时会调用此方法。因此,最好将myChildViewController
保存为属性或实例变量以供以后使用。
答案 1 :(得分:2)
我将不同意大多数其他响应者。我强烈建议不要试图操纵子视图控制器的表视图(或任何视图内容。)
您应该将视图控制器的视图层次结构视为私有。
相反,我会在prepareForSegue方法中保存一个指向子视图控制器的指针(如sha的帖子所示)。
让您的子视图控制器成为UITableViewController的自定义子类,其方法允许您为静态单元格的左视图指定新内容。
然后,在父视图控制器中,当您想要在表视图中更改某些内容时,使用保存的指向自定义表视图控制器(myChildViewController)的指针来调用为您进行所需更改的方法。这很容易。
我在github上有一个示例应用程序,它说明了使用容器视图和静态表视图。我希望我的设计尽可能具有通用性,因此我为子到父和父对子通信定义了协议。
答案 2 :(得分:0)
使用tableviewcontroller移动垃圾箱的容器视图。请改用UITableView
。您可以轻松地在其上创建IBOutlet
。或者你甚至可以从V1ViewController
继承你的UITableViewController
(取决于应该在屏幕上显示的内容)。然后在您的V1ViewController
UITableViewDelegate
和UITableViewDataSource
所需的方法中实施。