Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create a UISplitView manually?

I have an app that is going to navigate to a UISplitView (inside another view altogether) like so:

- (void) switchToMyDayView {
    NSLog(@"Show My Day Screen");

    if (self.myDayController.view.superview == nil) {
        if (self.myDayController == nil) {
            MyDayController *myController = [[MyDayController alloc] initWithNibName:@"MyDay" bundle:nil];
            self.myDayController = myController;
            [myController release];
        }

        [homeScreenController.view removeFromSuperview];
        [self.view insertSubview:self.myDayController.view atIndex:0];
    }
}

Which is done on the main navigation screen

Now, the MyDayController has a XIB called MyDay.xib which has these items:

File's Owner: MyDayController

First Responder: UIResponder

Split View Controller

 ---->Navigation Controller

         ---->Navigation Bar

         ----> Table View Controller

                 ----> Navigation Item

 ---->View Controller

So, I need some more components here, I need a UITableViewController and a UISplitViewControllerDelegate correct?

I was going to just implement these protocols in my MyDayController, is this sort of standard?

So, after the code above, I get an error:

-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "MyDay" nib but the view outlet was not set.

so, how can I fix it using the UISplitViewController? I know that the UISplitViewController has a view property, but I cannot use it/connect it up in IB can I?

Thanks a lot

Mark

like image 342
Mark Avatar asked Jul 22 '26 11:07

Mark


1 Answers

You shouldn't have to subclass UISplitViewController. What behavior is in your "MyDayController" class? UISplitViewController basically just handles laying out the master and detail views for you, so your responsibility is to implement those controllers.

If the split view is at the top level of your app, you can add it to your app's main window nib. If it isn't, just create it programatically:

- (void) switchToMyDayView {
    NSLog(@"Show My Day Screen");

    if (self.myDayController == nil) {
        YourMasterViewController *masterViewController = [[YourMasterViewController alloc] initWithNibName:@"MasterView" bundle:nil];
        YourDetailViewController *detailViewController = [[YourDetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
        UISplitViewController *myController = [[UISplitViewController alloc] init;
        myController.viewControllers = [NSArray arrayWithObjects:masterViewController, detailViewController, nil];
        [masterViewController release];
        [detailViewController release];

        self.myDayController = myController;
        [myController release];         
    }

    [homeScreenController.view removeFromSuperview];
    [self.view insertSubview:self.myDayController.view atIndex:0];
}

You also don't need the test for self.myDayController.view.superview == nil as it's implicit in self.myDayController == nil

like image 128
Christopher Pickslay Avatar answered Jul 24 '26 00:07

Christopher Pickslay



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!