我试图理解调用方法调用的方案/会出现和消失。
我所做的是选择表格单元格(灰色高光),转到详细视图并返回并取消选择所选行(删除选定的单元格灰色)。
以下是我的方法:
-(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;
}
所以,当我放置断点时,流程是这样的:
没有超级电话:
推送到新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
超级电话:
推送到新VC时:
current viewWillDisappear
new viewWillAppear
current viewDidAppear
current viewWillDisappear
current viewDidDisappear
new viewDidAppear
从推送VC返回时:
current viewWillDisappear
new viewDidDisappear
current viewDidDisappear
new viewDidAppear
无论是否使用超级通话,流程都大致相同。 但我遇到的问题是,当我在viewWillAppear中使用超级调用时,在删除单元格时会有一个延迟(大约> 1秒)。
如果我不在viewWillAppear中使用超级调用,则没有延迟并且单元格正在被删除(大约<0.5秒)
我不确定是否使用超级电话。
有谁能告诉我为什么取消选择细胞有延迟?
答案 0 :(得分:6)
是的,documentation表示您必须:
<强>讨论强>
在接收者的视图之前调用此方法 要添加到视图层次结构中,并且在任何动画之前 配置为显示视图。您可以覆盖此方法 执行与显示视图相关的自定义任务。例如, 您可以使用此方法来更改方向或样式 状态栏以与视图的方向或样式进行协调 被提出。 如果您覆盖此方法,则必须至少调用
super
实施中的某些内容。
答案 1 :(得分:1)
一般来说,请致电super
。我忘记了导航控制器中发生了奇怪的事情。
在这种情况下,如果您有一个UITableViewController,请尝试使用其clearsSelectionOnViewWillAppear
标志为您清除选择。
答案 2 :(得分:0)
是的,有必要写超级。