UISplitViewController programmatically without nib/xib

前端 未结 4 455
不知归路
不知归路 2020-12-12 15:28

I usually create my projects without IB-stuff. The first thing I do is to strip off all references to xibs, outlets updated plist, etc and so forth. No problems, works great

4条回答
  •  一向
    一向 (楼主)
    2020-12-12 16:19

    Declare your splitviewcontroller in your delegate header, use something like this in your didfinishlaunching

    ensure you add the UISplitViewControllerDelegate to the detailedViewController header file and that you have the delegate methods aswell. remember to import relevant header files

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    {    
    
        splitViewController = [[UISplitViewController alloc] init];
    
        rootViewController *root = [[rootViewController alloc] init];
        detailedViewController *detail = [[detailedViewController alloc] init]; 
    
        UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:root];
    
        UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail];
    
        splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil];
        splitViewController.delegate = detail;
    
        [window addSubview:splitViewController.view];
    

    EDIT - as per Scott's excellent suggestion below, don't add to the windows subview, instead

        [self.window setRootViewController:(UIViewController*)splitViewController];  // that's the ticket
        [window makeKeyAndVisible];
        return YES;
    }
    
    
    //detailedView delegate methods
    - (void)splitViewController:(UISplitViewController*)svc 
         willHideViewController:(UIViewController *)aViewController 
              withBarButtonItem:(UIBarButtonItem*)barButtonItem 
           forPopoverController:(UIPopoverController*)pc
    {  
        [barButtonItem setTitle:@"your title"];
    
    
    
        self.navigationItem.leftBarButtonItem = barButtonItem;
    }
    
    
    - (void)splitViewController:(UISplitViewController*)svc 
         willShowViewController:(UIViewController *)aViewController 
      invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
    {
        self.navigationItem.leftBarButtonItem = nil;
    }
    

    I also prefer code to IB ;-)

提交回复
热议问题