1

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

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

我更喜欢第一种方法,因为它通常看起来更有效,但是我无法弄清楚如何设置目标并进行重新加载(尤其是第一次,当视图控制器甚至还没有被初始化时 - -我正在使用情节提要,它几乎可以处理所有初始化本身)。

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

4

1 回答 1

2

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

如果要使用相同的控制器,则必须在代码中执行 push 或 presentViewController。您仍然可以在情节提要中设置控制器。给它一个标识符,但不要将它与 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];
于 2013-08-05T05:05:35.037 回答