【问题标题】:Present detail view controller for UISplitViewController on iPhone在 iPhone 上显示 UISplitViewController 的详细视图控制器
【发布时间】:2014-11-21 19:35:37
【问题描述】:

我很困惑如何在 iPhone 上处理拆分视图控制器,而不是 6 Plus,它处理像 iPad 这样的拆分视图控制器。我希望细节视图控制器成为出现在这些 iPhone 上的根视图控制器。

编辑

通过添加这两个委托方法,我能够获得我想要的行为。现在拆分视图控制器折叠到详细视图控制器而不是 iPhone 上的主视图控制器。

- (UIViewController *)primaryViewControllerForCollapsingSplitViewController:(UISplitViewController *)splitViewController
{
    return self.detailNavigationController;
}

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController
{
    return YES;
}

问题 1

当我将主视图控制器推送到 iPhone 上的详细视图控制器的导航控制器时,我现在在控制台中收到此消息。它工作正常,所以我不明白为什么我会收到此消息。

Unbalanced calls to begin/end appearance transitions for <MasterTableViewController: 0x7fc8d2b67220>.

问题 2

我不清楚在 iPhone 上检测拆分视图控制器何时折叠的首选方法。我正在使用UIViewControllerShowDetailTargetDidChangeNotification 通知来检测此更改,但我觉得应该有某种委托方法来进行此更改。

【问题讨论】:

标签: ios iphone ios8 uisplitviewcontroller


【解决方案1】:

如果你使用默认模板创建了 UISplitViewController,你会在 AppDelegate 文件中找到这个方法

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController {
    if ([secondaryViewController isKindOfClass:[UINavigationController class]] && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]] && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return YES;
    } else {
        return NO;
    }
}

返回 YES 时,此方法处理 UISplitViewController 在小屏幕设备中的默认行为,要解决您的问题,您必须返回 NO。用下面的代码替换方法

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController {
    if ([secondaryViewController isKindOfClass:[UINavigationController class]] && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]] && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return NO;
    } else {
        return NO;
    }
}

看看documentation

【讨论】:

  • 感谢您的回答。拆分视图控制器在不使用委托的情况下正确丢弃了详细视图控制器。我只是无法呈现它。我不断收到“应用程序试图以模态方式呈现活动控制器”崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2016-10-25
相关资源
最近更新 更多