我试图了解方法调用的情况,以查看确实/将会出现和消失。
我所做的是选择表格单元格(灰色的高光),转到详细信息视图,然后返回并取消选择选定的行(删除选定的单元格灰色)。
这是我的方法:
-(void)viewDidAppear:(BOOL)animated {
DLog(@"%@ did appear", self);
[super viewDidAppear:animated];
if (_isPushed) {
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
_isPushed=NO;
}
}
-(void)viewWillAppear:(BOOL)animated {
DLog(@"%@ will appear", self);
[super viewWillAppear:animated]; //If I remove this super call , then it works fine and there is no delay in deselecting the table cell
}
-(void)viewWillDisappear:(BOOL)animated {
DLog(@"%@ will disappear", self);
[super viewWillDisappear:animated];
}
-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
_isPushed=YES;
}
因此,当我设置断点时,流程如下:
不含 super 通话的:
在推送到新的VC时:
current viewWillDisappear //makes sense
new viewWillAppear //makes sense
current viewDidAppear // doesnt make sense , y this should get called as the view is already appeared?
current viewWillDisappear // make sense
current viewDidDisappear //make sense
new viewDidAppear //make sense
从推送的VC返回时:
current viewWillDisappear
new viewDidDisappear
current viewDidDisappear
new viewDidAppear
带有 super 调用的:
在推送到新的VC时:
current viewWillDisappear
new viewWillAppear
current viewDidAppear
current viewWillDisappear
current viewDidDisappear
new viewDidAppear
从推送的VC返回时:
current viewWillDisappear
new viewDidDisappear
current viewDidDisappear
new viewDidAppear
是否使用 super 调用的流程几乎相同。
但是我面临的问题是,当我在viewWillAppear中使用 super 调用时,在选择单元格时存在延迟(大约> 1秒)。
如果我不在viewWillAppear中使用 super 调用,则没有延迟,并且单元正在取消选择(大约
我不确定是否使用 super 通话。
谁能告诉我为什么取消选择单元格会有延迟吗?
最佳答案
是的,documentation指出您必须:
讨论
在接收者的视图关于
要添加到视图层次结构中,然后再添加任何动画
配置为显示视图。您可以覆盖此方法以
执行与显示视图相关的自定义任务。例如,
您可以使用此方法更改广告的方向或样式
状态栏以与视图的方向或样式协调
被呈现。 如果覆盖此方法,则必须在以下位置调用super
实现中的某些点。