2012-01-08 8 views
0

J'ai implémenté un MGSplitViewController où j'ai 6 lignes dans le controler masterview et chacune charge un nouveau UIViewController dans le detailviewcontroller - J'ai suivi le projet exemple Apples sur l'utilisation de plusieurs contrôleurs de vue détaillée. Mais j'ai quelques problèmes bizarres avec ça.MGSplitViewController avec plusieurs contrôleurs de vue détaillée

Tout d'abord, lors de la charge initiale, le premier contrôleur de détail détaillé sélectionné s'affiche parfaitement. Cependant, quand je sélectionne différentes lignes dans le controler masterview pour changer le contrôleur de vue de détail, la ligne est sélectionnée mais le detailviewcontroller ne change pas - ceci continue comme ceci pendant plusieurs clics - alors tout fonctionne bien. Eh bien, presque maintenant, lorsque le nouveau detailviewcontroller se charge, les vues sont parfois recouvertes. Par exemple, si je sélectionne d'abord un detailviewcontroller avec une vue de table, puis que j'en sélectionne un qui ne contient que quelques boutons, les boutons apparaissent superposés à la tableview. Si quelqu'un peut comprendre ce que je fais mal, faites le moi savoir. Voici ma méthode de faire soi-même.

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    /* 
    Create and configure a new detail view controller appropriate for the selection. 
    */ 

    switch (indexPath.row) { 
     case 1: 
     { 
      self.splitViewController.detailViewController = self.postViewController; 
//   popover = [[UIPopoverController alloc] initWithContentViewController:self.postViewController]; 
//   [popover presentPopoverFromRect:CGRectMake(200, 0, 100, 100) 
//          inView:self.splitViewController.view 
//     permittedArrowDirections:UIPopoverArrowDirectionAny 
//         animated:YES]; 
      break; 
     } 
     case 2: 
      self.splitViewController.detailViewController = self.latestViewController; 
      break; 
     case 3: 
      self.splitViewController.detailViewController = self.categoriesViewController; 
      break; 
     case 4: 
      self.splitViewController.detailViewController = self.messagesViewController; 
      break; 
     case 5: 
      self.splitViewController.detailViewController = self.searchViewController; 
      break; 
     case 6: 
      self.splitViewController.detailViewController = self.accountViewController; 
      break; 
     default: 
      break; 
    } 
} 
+0

Je suppose que vous n'utilisez pas ARC avec votre application. Ne voulez-vous pas supprimer le précédent detailViewController de la vue d'ensemble avant d'en affecter un nouveau? Quelles sont vos propriétés de tous les detailViewControllers? –

+0

Désolé, j'utilise ARC. Comment pourrais-je les enlever? J'ai essayé de les mettre à zéro mais j'ai une erreur de compilation. Tous les detailViewControllers sont des UINavigationControllers qui sont (nonatomic, strong). – xizor

+1

Non, avec ARC vous n'avez pas besoin de les libérer, mais avant d'assigner une nouvelle vue de détail, vous pouvez essayer quelque chose comme 'if (self.splitViewController.detailViewController) [self.splitViewController.detailViewController.view removeFromSuperview];' –

Répondre

2

Il semble y avoir un bug dans MGSplitViewController où il ne supprime pas la vue de detailViewController précédente. Pour résoudre ce problème, ajoutez la ligne suivante au-dessus de votre instruction switch:

[self.splitViewController.detailViewController.view removeFromSuperview] 
Questions connexes