UISplitviewController Master中的iOS8 TabbarController

Its*_*ing 9 uitabbarcontroller uisplitviewcontroller ios8

我试图通过在MasterView的UINavigationController前面添加一个UITabbarController来扩展默认的Apple MasterDetail模板,所以有一个这样的结构:

UISplitViewController(Master)> UITabbarController> UINavigationController> UITableViewController

但是如果我运行App,在更改应用程序(didFinishLaunchingWithOptions)以使用正确的ViewController之后,并尝试执行ShowDetails Segue,则会在iPhone上以模态方式呈现DetailsView.另一方面,iPad版本正在按预期工作.我忘记做什么了?或者我该如何解决?

Pet*_*ttl 8

我想出了如何将细节放到master的UINavigationController上,而不是通过UITabBarController以模态方式呈现它.

使用UISplitViewControllerDelegate方法

- splitViewController:showDetailViewController:sender:
Run Code Online (Sandbox Code Playgroud)

如果UISplitViewController折叠,请获取主控导航控制器并将详细视图推送到此导航控制器:

- (BOOL)splitViewController:(UISplitViewController *)splitViewController
   showDetailViewController:(UIViewController *)vc
                     sender:(id)sender {
    NSLog(@"UISplitViewController collapsed: %d", splitViewController.collapsed);

    // TODO: add introspection
    if (splitViewController.collapsed) {
        UITabBarController *master = (UITabBarController *) splitViewController.viewControllers[0];
        UINavigationController *masterNavigationController = (UINavigationController *)master.selectedViewController;

        // push detail view on the navigation controller
        [masterNavigationController pushViewController:vc animated:YES];

        return YES;
    }

    return NO;
}
Run Code Online (Sandbox Code Playgroud)


chr*_*nse 7

只是为了更新上面的答案.由于您无法再推送导航控制器,因此您必须推送其顶视图控制器.

    func splitViewController(splitViewController: UISplitViewController, showDetailViewController vc: UIViewController, sender: AnyObject?) -> Bool {
        if splitViewController.collapsed {
            let tabBarController = splitViewController.viewControllers.first as! UITabBarController
            let selectedNavigationViewController = tabBarController.selectedViewController as! UINavigationController

            // Push view controller
            var viewControllerToPush = vc
            if let navController = vc as? UINavigationController {
                viewControllerToPush = navController.topViewController
            }
            selectedNavigationViewController.pushViewController(viewControllerToPush, animated: true)

            return true
        }

        return false
    }
Run Code Online (Sandbox Code Playgroud)