2

我的故事板设置如下:

  1. 定义为自定义类的视图,我们称之为V1ViewController
  2. 这个视图有一个视图容器
  3. 视图容器有一个UITableViewController带有一组静态单元格
  4. 单元格的样式为“Left Detail”

我正在尝试从 中的代码访问左侧详细信息中的文本框V1ViewController,但似乎无法弄清楚如何遍历该层次结构。任何帮助,将不胜感激。

4

3 回答 3

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];   
   }
}

请记住,因为这是一个容器视图,所以将在加载您的ViewController. 因此,最好将其保存myChildViewController为属性或实例变量以供以后使用。

于 2014-01-13T22:04:35.973 回答
2

我将不同意大多数其他响应者的观点。我强烈建议不要尝试操纵子视图控制器的表格视图(或任何它的视图内容。)

您应该将视图控制器的视图层次结构视为私有的。

相反,我会在您的 prepareForSegue 方法中保存一个指向子视图控制器的指针(如 sha 的帖子所示)。

使您的子视图控制器成为 UITableViewController 的自定义子类,其方法可让您为静态单元格的左视图指定新内容。

然后,在父视图控制器中,当您想要更改表格视图中的某些内容时,使用保存的指向自定义表格视图控制器 (myChildViewController) 的指针来调用为您进行所需更改的方法。这很容易。

我在 github 上有一个示例应用程序,它说明了使用容器视图和静态表视图。我希望我的设计尽可能通用,因此我为孩子对父母和父母对孩子的通信定义了协议。

查看这个在容器视图中使用静态表视图的演示。

于 2014-01-15T18:56:09.813 回答
0

使用 tableviewcontroller 将您的容器视图移入垃圾箱。改用UITableView. 您可以轻松地IBOutlet在其上创建。或者你甚至可以继承你V1ViewController的子类UITableViewController(取决于应该在屏幕上显示的内容)。然后在您的V1ViewController UITableViewDelegateUITableViewDataSource所需的方法中实施。

于 2014-01-14T12:08:44.690 回答