我试图了解方法调用的情况,以查看确实/将会出现和消失。

我所做的是选择表格单元格(灰色的高光),转到详细信息视图,然后返回并取消选择选定的行(删除选定的单元格灰色)。

这是我的方法:

-(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 实现中的某些点。

10-07 19:00
查看更多