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];
}