在 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 的详细视图控制器的主要内容,如果未能解决你的问题,请参考以下文章