UisplitView - Charger Différents Détails pour chaque ligne de MasterView
-
18-09-2020 - |
Question
J'utilise UisplitViewController pour l'application sur iPad.La première tâche était de montrer la vue Master et Détail en mode portrait.Je l'ai fait comme ça:
// 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, cela fonctionne correctement et lorsque je lance une application en mode portrait, il affiche à la fois la vision des maîtres et des détails côte à côte.
Tout fonctionne pour l'instant.Mais je veux montrer une vue différente en détailview pour chaque enregistrement (rangée) en vue de la maîtrise. Ma méthode DidSelectrowAindexpath à MasterView ressemble à celle:
- (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 (toucher) sur la première ou la deuxième ligne (dans MasterView) SplitView indique uniquement DétacherView (écran entier) sans MasterView.
Comment puis-je forcer la vision de SplitView pour montrer le changement à la fois des vues, des maîtres et de la vue détaillée ???
Merci pour votre aide!
La solution
J'ai trouvé la solution.Dans MasterView, j'ai créé SplitViewController Instance et attribuez une instance locale à cette instance:
settingsSplitViewController = (SettingsSplitViewController *)self.splitViewController;
dans la méthode danselectrowatudexpath J'ai fait cela comme ça:
[settingsSplitViewController setupPortraitMode:self.navigationController detail:detailNavigationController];
J'espère que cela aidera quelqu'un d'autre à résoudre ce genre de problème.