UISplitViewController - 通过Storyboard Segue实现多个详细视图控制器

5
我正在为iPad开发一个项目,希望利用分割视图控制器。对于主视图控制器中的每个单元格,我将拥有不同的详细视图控制器。
我在这个网站上看到了一种使用故事板segue实现此目的的解决方案。
他基本上将每个UITableViewCell链接到不同的详细视图控制器。但我想知道这是否是一种“稳定”或“好”的做法。我的意思是,与以编程方式完成相比,它是否更好或者一样稳定?如果有的话,采用他的方法会有什么后果?
这里是我找到的链接解决方案。

我认为这是一个不错的方法。如果您事先知道选项,当然可以在表视图中使用静态单元格,然后对每个详细视图使用单独的segue。如果您不知道选项,则必须使用原型单元格,然后必须使用通用segue,需要使用performSeguewithIdentifier方法从代码触发。您可以在此处找到我解决类似问题的解决方案 - http://swiftwala.com/multiple-detail-views - Sachin Palewar
1个回答

4

这有点棘手,尽管这是一个非常常见的用例。

1) 一种想法是将空的根视图控制器作为您的详细信息,并在其后台处理管理segue以快速segue到实际关心的详细信息视图,利用“替换”segue。这应该“在技术上”解决了在左上角具有“返回”按钮的问题,并允许您弹出到根视图且不显示空控制器。虽然我没有测试过这些,所以我不确定。

编辑:在Xcode 6中,“替换”segue方便地由“显示细节”segue处理,该segue专门用于在Split View Controllers上处理此类视图。我建议在新项目中仅使用此方法。请参阅示例代码。

2) 另一种想法是在storyboard中拥有单独的导航控制器(一个连接的,其余的都被孤立)。每个详细信息视图类型一个导航控制器,点击主菜单将简单地将导航控制器换成您关心的详细信息视图之一。

在AppDelegate中的类似于以下代码:

self.detailNavigationController = [self.masterNavigationController.storyboard instantiateViewControllerWithIdentifier:@"MyChosenNavigationControllerStoryboardId"];
self.splitViewController.viewControllers = @[self.splitViewController.viewControllers[0], self.detailNavigationController];
self.splitViewController.delegate = (id)self.detailNavigationController.topViewController;

这种第二种方法的缺点在于,进行内存测试时,似乎替换新的导航控制器并不能释放旧的导航控制器使用的所有内存。因此,这种方法适用于简单的应用程序,而不适用于任何非常复杂的应用程序。

示例代码不适用于紧凑宽度设备:https://github.com/dstarsboy/TMMultiDetailSplitView/issues/2 这有点违背使用分割视图控制器的目的。 - lostintranslation
该问题标记为仅限iPad,并且特别涉及iPad。当您打开示例代码时,该应用程序不是通用的,而是作为iPad应用程序锁定在其中...紧凑设备与任何问题或答案无关。然而,我刚刚更新了代码,使其也适用于手机,希望能对您有所帮助。 - Travis M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接