在iOS中实现主 - 细节视图控制器的传统方法

时间:2013-08-05 04:54:58

标签: ios cocoa-touch uiviewcontroller storyboard

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

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

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

或者也许不是在子视图控制器上设置目标,我可以在父视图上设置它,这样每次显示子视图控制器时,它会根据父选择重新加载?这实际上听起来像是迄今为止最好的选择,只是寻找之前碰到过的人的提示/警告。

1 个答案:

答案 0 :(得分: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];