是否正确手动调用viewDidAppear?

mru*_*ueg 6 iphone scroll uitableview viewdidappear

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

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

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

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

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

Rob*_*ert 13

如果您正在使用视图控制器包含,请不要viewWillAppear:直接调用.而是使用– beginAppearanceTransition:animated:– endAppearanceTransition.

如果要实现自定义容器控制器,请使用此方法告诉子项其视图将要显示或消失.不要直接调用viewWillAppear:,viewWillDisappear:,viewDidAppear:或viewDidDisappear :.

调用addSubView会自动触发viewWillAppear:,viewDidAppear:如果视图的viewController是子视图控制器,那么viewWillAppear:直接调用将触发视图将两次外观方法.使用beginAppearanceTransition:animated:and- endAppearanceTransition`将抑制自动行为,因此您只能调用一次.

  • 谢谢我的朋友,在花了一整天的时间解决错误之后,你的回答拯救了我的一天 (2认同)

Phi*_*ert 0

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

如果子视图控制器尚未完全初始化,这会导致问题,那么您可能会遇到另一个问题。确保您的子视图控制器在调用-viewWillAppear后完全“准备好执行操作” (您也可以从父级的-viewWillAppear手动调用)