【发布时间】:2023-04-04 05:40:02
【问题描述】:
我正在尝试了解对视图进行/将出现和消失的方法调用的场景。
我所做的是选择表格单元格(灰色突出显示),转到详细视图并返回并取消选择所选行(删除所选单元格灰色)。
这是我的方法:
-(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 中的超级调用,则没有延迟并且单元格正在取消选择(大约
我不确定是否使用超级呼叫。
谁能告诉我为什么取消选择单元格会有延迟?
【问题讨论】:
-
如果您不添加任何代码,请不要添加方法。 Apple 模板添加了可能有用的"Boilerplate" 方法,如果您不需要它们,即不需要向它们添加代码,请将它们删除。在此示例中,您可以只删除方法:
viewWillAppear和viewWillDisappear。
标签: ios objective-c viewwillappear viewdidappear