Iphone 调用ViewDid手动显示的正确时间?

Iphone 调用ViewDid手动显示的正确时间?,iphone,scroll,uitableview,viewdidappear,Iphone,Scroll,Uitableview,Viewdidappear,我的应用程序中有一个UITableViewController,它直接添加到视图层次结构中。视图出现后,我想滚动到特定单元格。我的解决方案是调用代码以便在-[viewdide]中滚动 根据苹果的文档,我必须手动调用该方法: 如果属于视图控制器的视图直接添加到视图层次结构中,则视图控制器将不会收到此消息。如果在视图层次结构中插入或添加视图,并且该视图具有视图控制器,则应直接向关联的视图控制器发送此消息 问题是:什么时候是手动调用的正确时间 当我尝试进行滚动时,从父视图控制器的-[viewdide]

我的应用程序中有一个
UITableViewController
,它直接添加到视图层次结构中。视图出现后,我想滚动到特定单元格。我的解决方案是调用代码以便在
-[viewdide]
中滚动

根据苹果的文档,我必须手动调用该方法:

如果属于视图控制器的视图直接添加到视图层次结构中,则视图控制器将不会收到此消息。如果在视图层次结构中插入或添加视图,并且该视图具有视图控制器,则应直接向关联的视图控制器发送此消息

问题是:什么时候是手动调用的正确时间


当我尝试进行滚动时,从父视图控制器的
-[viewdide]
调用它会导致崩溃,因为显然,表视图实际上还没有出现,因此认为它没有可滚动的节。

从父控制器的-viewdide>调用它通常是最好的选择


如果由于子视图控制器尚未完全初始化而导致问题,则可能会出现另一个问题。在调用-viewwillbeen后(您也可以从父视图的-viewwillbeen手动调用),确保您的子视图控制器完全“准备好执行操作”

在tableview的-[viewDidDisplay]中,实际上是从父视图控制器的-[viewDidDisplay]调用,您可以调用[tableview reloadData],这样可以确保tableView已加载并准备就绪。

这就是我手动调用
viewwillbeen
viewdidebeen
viewwillbeside
viewdideside

我以这种方式加载的其中一个视图控制器具有以下视图将显示:(请注意,这是
视图将显示
,因为在调用
视图显示
时,用户可以查看您的视图)


如果您使用的是视图控制器包含,则不要直接调用
视图:
。而是使用和

如果要实现自定义容器控制器,请使用此方法告知子级其视图即将出现或消失。不要直接调用ViewWillExample:、ViewWillEnglish:、ViewDidDisplay:、或ViewDidEnglish:


如果视图的viewController是子视图控制器,则调用addSubView将自动触发视图显示:和视图显示:,因此直接调用视图显示:将触发视图显示方法两次。使用beginAppearanceTransition:animated:
–endAppearanceTransition`将抑制自动行为,因此只调用一次

谢谢我的朋友,在花了一整天的时间处理一个bug之后,你的答案救了我一天。你绝对不应该直接调用这些生命周期事件。如果你的视图控制器不在根视图控制器中,那么这些生命周期事件将永远不会被调用。因此,如果你想使用它们,你绝对需要手动调用它们。他们只是一个函数,不是酒鬼。
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [wordListTable reloadData];
    [wordListTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
}