在 iPhone 上显示 UISplitViewController 的详细视图控制器

Posted

技术标签:

【中文标题】在 iPhone 上显示 UISplitViewController 的详细视图控制器【英文标题】:Present detail view controller for UISplitViewController on iPhone 【发布时间】: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 通知来检测此更改,但我觉得应该有某种委托方法来进行此更改。

【问题讨论】:

回答这个问题***.com/questions/25875618/…可能会有所帮助 【参考方案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

【讨论】:

感谢您的回答。拆分视图控制器在不使用委托的情况下正确丢弃了详细视图控制器。我只是无法呈现它。我不断收到“应用程序试图以模态方式呈现活动控制器”崩溃。

以上是关于在 iPhone 上显示 UISplitViewController 的详细视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

怎么让iphone上显示的东西 在MAC上显示

GIF 图像不显示在 iPhone 上

如何将 iPhone 的屏幕在 Mac 上显示出来

专为 iPhone 5 设计的应用程序,在 iPhone 4S 上显示部分剖视图

背景图像不显示在 iPhone 上

仅 iPhone 应用程序中的 UIWebView 显示在 iPad 上