加载子视图会触发根ViewController

时间:2015-11-08 00:45:48

标签: ios objective-c iphone uitableview uiviewcontroller

我的应用程序包含三个屏幕,主菜单是根视图,它提供了选择第二个视图的选项。

第二个视图是UITableView,如果选择了表格中的单元格,则第三个视图(详细视图)会加载。

当第三个视图加载时,根视图控制器的'viewDidLoad'中包含的函数被触发,为什么会这样?

我尝试过各种segues(从tableview到详细视图)但结果是一样的,这是我目前的实现:

   - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
       if ([segue.identifier isEqualToString:@"nameOfSegue"]) {
          UITableViewCell *cell = sender;
          NSIndexPath *indexPath = [self.table indexPathForCell:cell];
        UINavigationController *navigationController = segue.destinationViewController;
        EntryViewController *TitleViewController = (EntryViewController *) navigationController.topViewController;
        TitleViewController.entry = [self.fetchedResultsController objectAtIndexPath:indexPath];
    }
}

segue本身是否触发了根视图控制器,还是我找错了地方?

2 个答案:

答案 0 :(得分:1)

你可能做错了什么。因为我担心viewDidLoad()只在屏幕上呈现视图之前被调用一次。你确定正在调用第一个控制器的viewDidLoad()吗?

或许可以帮助您更多地了解Main.storyboard的屏幕截图,并且控制器的完整代码也很有用。

来自Apple文档:

  

在视图控制器加载其视图后调用此方法   层次结构到内存。无论是否调用此方法   视图层次结构是从nib文件加载或以编程方式创建的   在loadView方法中。您通常会覆盖此方法以执行   对从nib文件加载的视图进行额外的初始化。

答案 1 :(得分:0)

您使用的是StoryBoard吗? 您可以将第三个viewController的类设置为第一个viewController,以便第三个viewController显示viewDidLoad时调用。