在iOS中实现主细节视图控制器的常规方式



我只是有一个关于在iOS中实现主详细信息视图层次结构的推荐方法的快速问题——在一个屏幕上选择表中的一行会将该项目的详细信息视图推到导航堆栈上。

具体来说,我应该重用细节视图控制器的同一个实例,每次只更改其目标并重新加载它,还是应该每次实例化视图控制器的新实例?

我更喜欢第一种方法,因为它通常看起来更有效,但我很难弄清楚如何设置目标和重新加载(尤其是第一次,当视图控制器还没有初始化时——我使用的是情节串连板,它本身几乎可以处理所有初始化)。

或者,我可以将目标设置在父视图控制器上,而不是在子视图控制器上设置目标,这样每次显示子视图控制器时,它都会根据父视图选择重新加载自己?事实上,这听起来是迄今为止最好的选择,只是从以前遇到过这种情况的人那里寻找提示/警告。

首先,每次创建一个新的视图控制器没有错。如果你使用segues,那就是你会得到的,因为segues总是实例化新的控制器。无论如何,当您弹出或关闭细节控制器时,它都会被释放,因此它不会持久存在。

如果你想使用同一个控制器,你必须在代码中执行推送或呈现ViewController。您仍然可以在情节提要中设置控制器。给它一个标识符,但不要用segue连接它。在代码中,你检查你的控制器是否存在(你需要一个属性),如果它不存在,就创建它

if (! self.detailController) {
    DetailController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyIdentifier"];
}
self.dvc.whateverProperty = self.somePropertyIWantToPass; // pass some date to it
[self.navigationController pushViewController:dvc animated:YES completion:nil];

最新更新