手动调用viewDidAppear的正确时间?

手动调用viewDidAppear的正确时间?

问题描述:

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

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

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

问题是:什么时候手动调用它?

从父视图控制器的-[viewDidAppear]导致崩溃调用它,当我尝试做滚动因为很明显,表视图实际上没有尚未出现,因此认为它有没有部分滚动到。

调用它从父控制器的-viewDidAppear通常是你最好的选择。

如果这会导致问题,如果子视图控制器尚未完全初始化,您可能会遇到另一个问题。确保你的孩子视图控制器完全是“准备行动” -viewWillAppear被调用后(你也可以从手动调用父-viewWillAppear

在 - [viewDidAppear]上实现代码如下,确实叫从父视图控制器的 - [viewDidAppear]中,您可以调用[tableView reloadData],这样可以确保tableView已加载并准备就绪。

这是如何我手动调用viewWillAppearviewDidAppearviewWillDisappearviewDidDisappearhere

和视图控制器之一予加载这种方式,具有以下viewWillAppear:(注意,这是因为在点viewWillAppearviewDidAppear被称为,您的看法是由用户可查看)

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [wordListTable reloadData]; 
    [wordListTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 
} 

当您调用它时会发生什么样的崩溃错误?有可能你没有正确保留你的tableview。

如果您使用视图控制器遏制,请不要直接拨打viewWillAppear:。请使用– beginAppearanceTransition:animated:– endAppearanceTransition

如果您正在实现自定义容器控制器,请使用此方法告诉孩子其视图即将出现或消失。不要直接调用viewWillAppear :, viewWillDisappear:,viewDidAppear :,或viewDidDisappear:。

调用addSubView将自动触发viewWillAppear:viewDidAppear:如果视图的的viewController是儿童视图控制器,因此主叫viewWillAppear:直接将触发视图将外观的方法两次。使用beginAppearanceTransition:动画:and - endAppearanceTransition`将抑制自动行为,因此您只能调用一次。