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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top