我很困惑如何处理除了处理像iPad这样的分割视图控制器的6 Plus之外的iPhone上的分割视图控制器。我希望详细视图控制器成为那些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
通知来检测此更改,但我觉得应该有这种更改的委托方法。
答案 0 :(得分: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;
}
}