2010-05-18 15 views
3

J'ai une application qui va naviguer vers un UISplitView (dans une autre vue tout à fait) comme ceci:Comment créer un UISplitView manuellement?

- (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]; 
    } 
} 

Ce qui se fait sur l'écran principal de navigation

Maintenant, le MyDayController a un XIB appelé MyDay.xib qui a ces articles:

File's Owner: MyDayController

First Responder: UIResponder

Split View Controller

---->Navigation Controller 

     ---->Navigation Bar 

     ----> Table View Controller 

       ----> Navigation Item 

---->View Controller 

, je dois donc encore quelques éléments ici, je besoin d'un UITableViewController et un UISplitViewControllerDelegate correct?

J'allais simplement implémenter ces protocoles dans mon MyDayController, est ce genre de standard?

Ainsi, après le code ci-dessus, je reçois une erreur:

- [UIViewController _loadViewFromNibNamed: paquet:] chargé la pointe "de MyDay", mais la prise de vue n'a pas été définie. Alors, comment puis-je le réparer en utilisant le UISplitViewController? Je sais que l'UISplitViewController a une propriété de vue, mais je ne peux pas l'utiliser/le connecter dans IB je peux?

Merci beaucoup

Mark

Répondre

5

Vous ne devriez pas avoir à sous-classe UISplitViewController. Quel comportement est dans votre classe "MyDayController"? UISplitViewController ne gère essentiellement que la disposition des vues principale et détaillée pour vous, votre responsabilité est donc d'implémenter ces contrôleurs.

Si la vue partagée est au niveau supérieur de votre application, vous pouvez l'ajouter à la plume de la fenêtre principale de votre application. Dans le cas contraire, il suffit de créer 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]; 
} 

Vous pouvez aussi ne pas besoin de test pour self.myDayController.view.superview == nil comme il est implicite dans self.myDayController == nil

0

J'ai donné aan réponse question similaire. here

Espérons que ça aide.

Merci, Madhup

0

si vous voulez créer avec le contrôleur de navigation maître et détail alors vous pouvez le faire

self.rootViewController=[[RootViewController alloc]init]; 
    self.detailViewController=[[FirstDetailViewController alloc]init]; 

    UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController]; 
    UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController]; 

    self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil]; 
    self.splitViewController.delegate=self.detailViewController; 
1

Merci Christopher Pickslay. Cette solution fonctionne pour moi mais je dois réparer quelque chose que vous avez donné. S'il vous plaît voir mon code ci-dessous.

fichier délégué

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    LeftViewController *leftViewController = [[LeftViewController alloc] init];// initWithNibName:@"LeftViewController" bundle:nil]; 
    RightViewController *rightViewController = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil]; 
    UISplitViewController *myController = [[UISplitViewController alloc] init]; 
    myController.viewControllers = [NSArray arrayWithObjects:leftViewController, rightViewController, nil]; 

    self.window.rootViewController = myController; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Hope this helps.