iOS - 带有 Storyboard的 UISplitViewController - 多个主视图和多个详细 View

标签 ios ipad uiviewcontroller storyboard uisplitviewcontroller

我正在尝试使用 UISplitViewController 和 Storyboard 组合一个 iPad 应用程序。主视图从一个导航 Controller 开始,该 Controller 链接到一个包含 6 个菜单选项的表格 View 。表格中的每个单元格将不同的表格 View Controller 推送到导航堆栈上。这适用于主视图。每个主视图都有一个表列表,单击该列表时需要在详细信息 Pane 中显示不同的 View Controller 。我目前通过将 segue 设置为“替换”和“详细拆分”来完成此操作,这在第一次单击一行时起作用,但是一旦您在主视图中单击另一行或旋转设备,应用程序就会崩溃与 EXC_BAD_ACCESS。

我相当确定我的问题与如何为 UISplitViewController 设置委托(delegate)有关。当我有多个主 VC 和多个详细 VC 时,我对如何使用它感到困惑。委托(delegate)代码应该放在哪里 - master 还是 detail?我是否必须在每个 View Controller 中实现 UISplitViewControllerDelegate 协议(protocol)事件?

感谢任何帮助。

最佳答案

如果 Split View Controller 委托(delegate)是已被替换的详细 View Controller ,这就是崩溃的原因。替换的详细 View Controller 正在被释放,因此 Split View Controller 委托(delegate)不再是对有效对象的引用。

您可以在 prepareForSegue:sender: 中更新委托(delegate)。例如:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"MySegue"]) {
        UIViewController *destinationViewController = [segue destinationViewController];
        if ([destinationViewController conformsToProtocol:@protocol(UISplitViewControllerDelegate)]) {
            self.splitViewController.delegate = destinationViewController;
        }
        else {
            self.splitViewController.delegate = nil;
        }
    }
}

您将哪些 View Controller 用于委托(delegate)取决于您的 View Controller 层次结构。在最简单的情况下,分配给 splitVC detail 的任何 View Controller 可能都需要是委托(delegate)。您可能希望将它们全部基于处理共享 Split View Controller 委托(delegate)逻辑的公共(public)父类(super class)。

关于iOS - 带有 Storyboard的 UISplitViewController - 多个主视图和多个详细 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10538231/

相关文章:

iphone - 显示模态视图 Controller 时设备旋转

iphone - 打开和关闭其他 UIViewController - 除了使用协议(protocol)和委托(delegate)之外的任何其他方法?

ios - 返回创建者 View Controller 时背景音乐重叠

ios - iOS 和 tvOS 应用程序上的相同 viewController,UIPickerViewDelegate 在 tvOS 上不可用

ios - 获取文本字段上的 "bottom space to superview"约束

iphone - 什么时候在 iOS 中使用 layoutSubview

iphone - iPad推送导航问题

iphone - 是否有可能在结束减速之前知道最终的 UIScrollView contentOffset?

ios - Metal iOS 中的 mask

ios - 在 Swift 中使用 RestKit 和 CoreData