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!
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? –