如何更新容器视图中的单元格

时间:2014-01-07 20:58:28

标签: ios objective-c container-view

我的 storyboard 设置如下:

  1. 定义为自定义类的视图,我们称之为V1ViewController
  2. 此视图有一个视图容器
  3. 视图容器的UITableViewController带有一组静态单元格
  4. 单元格的格式为“Left Detail”
  5. 我正试图从V1ViewController中的代码访问左侧详细信息中的文本框,但似乎无法弄清楚如何遍历该层次结构。任何帮助将不胜感激。

3 个答案:

答案 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上有一个示例应用程序,它说明了使用容器视图和静态表视图。我希望我的设计尽可能具有通用性,因此我为子到父和父对子通信定义了协议。

查看using static table views in a container view的演示文稿。

答案 2 :(得分:0)

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