4

J'utilise UISplitViewController pour l'application sur iPad. La première tâche consistait à montrer la vue principale et détaillée en mode portrait. Je l'ai fait comme ça:UISplitView - charger différents detailView pour chaque ligne dans masterView

// It is possible to keep the Master View in portrait mode 
// also. Just pass YES to this method to enable this mode. 
- (id) initWithMasterInPortraitMode:(BOOL) masterInPortrait { 
    self = [super init]; 
    self.keepMasterInPortraitMode = masterInPortrait; 
    return self; 
} 

// Thanks to http://intensedebate.com/profiles/fgrios for this code snippet 
-(void) viewWillAppear:(BOOL)animated { 
    NSLog(@"viewWillAppear"); 
    if(keepMasterInPortraitMode == NO) { 
     return; 
    } 

    //check interface orientation at first view and adjust it 
    //if it is in portrait mode 
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 
     UIViewController* master = [self.viewControllers objectAtIndex:0]; 
     UIViewController* detail = [self.viewControllers objectAtIndex:1]; 
     [self setupPortraitMode:master detail:detail]; 
    } 
} 

// Thanks to http://intensedebate.com/profiles/fgrios for this code snippet 
- (void)setupPortraitMode:(UIViewController*)master detail:(UIViewController*)detail { 
    //adjust master view 
    CGRect f = master.view.frame; 
    f.size.width = 320; 
    f.size.height = 1024; 
    f.origin.x = 0; 
    f.origin.y = 0; 

    [master.view setFrame:f]; 

    //adjust detail view 
    f = detail.view.frame; 
    f.size.width = 448; 
    f.size.height = 1024; 
    f.origin.x = 321; 
    f.origin.y = 0; 

    [detail.view setFrame:f]; 
} 

Je crée SPLITVIEW comme ceci:

MySplitViewController *mySplitViewController = [[MySplitViewController alloc] initWithMasterInPortraitMode:YES]; 

Ok, ça fonctionne bien et quand je lance l'application en mode portrait, il montre à la fois maître et détail côté vue côte à côte .

Tout fonctionne pour l'instant. Mais je veux montrer une vue différente dans detailView pour chaque enregistrement (ligne) dans la vue principale. Ma méthode de didSelectRowAtIndexPath à MASTERVIEW ressemble à ça:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row == 0) { 
     FirstDetailViewController *firstDetailView = [[FirstDetailViewController alloc] initWithNibName:@"firstDetailView" bundle:nil]; 
     UINavigationController *firstDetailNavigationController = [[UINavigationController alloc] initWithRootViewController:firstDetailView]; 
     [firstDetailView release]; 

     [self.splitViewController setViewControllers:[NSArray arrayWithObjects:self.navigationController, firstDetailNavigationController, nil]]; 
    } 
    else { 
     SecondDetailViewController *secondDetailView = [[SecondDetailViewController alloc] initWithNibName:@"secondDetailView" bundle:nil]; 
     UINavigationController *secondDetailNavigationController = [[UINavigationController alloc] initWithRootViewController:secondDetailView]; 
     [secondDetailView release]; 

     [self.splitViewController setViewControllers:[NSArray arrayWithObjects:self.navigationController, secondDetailNavigationController, nil]]; 
    } 
} 

Après un clic (touche) sur la première ou deuxième rangée (en MASTERVIEW) SPLITVIEW montre que DetailView (écran entier) sans MASTERVIEW.

Comment est-ce que je peux forcer splitView à montrer sur le changement les vues, la vue de maître et de détail ???

Merci pour votre aide!

+0

J'ai trouvé un exemple de l'iPhone Developer Center - MultipleDetailsView, mais je ne comprends pas les protocoles: https://developer.apple.com/iphone/library/samplecode/MultipleDetailViews/Introduction/Intro.html Est-ce que quelqu'un sait comment mettre en œuvre cela? –

Répondre

0

J'ai trouvé la solution. En MASTERVIEW j'ai créé exemple splitViewController et ASSIGN instance locale à cette instance:

settingsSplitViewController = (SettingsSplitViewController *)self.splitViewController; 

Dans la méthode didSelectRowAtIndexPath Je l'ai fait comme ça:

[settingsSplitViewController setupPortraitMode:self.navigationController detail:detailNavigationController]; 

espère que ça va aider quelqu'un d'autre pour résoudre ce genre de problème.

Questions connexes