0

j'ai un UISplitViewController en vue de maître mis en place comme suit:rejetant le contrôleur de vue split popover

UITabBarController 
    Tab1: 
    UINavigationController -> UIViewController -> UIViewController 
    Tab2: 
    UINavigationController -> UIViewController 

Chacun des UIViewControllers est une vue de table, et lorsque l'utilisateur choisit une ligne de la dernière, une image est affichée dans la vue détaillée, qui contient un UIScrollView.

Le contrôleur de barre d'onglets est UISplitViewControllerDelegate et gère la mise en place du bouton sur une barre d'outils en haut de la vue défilement.

Le problème est, je veux ajouter du code pour rejeter le popover lorsque l'utilisateur fait leur choix. Le pointeur sur le popover doit être enregistré dans le contrôleur de la barre d'onglets lorsque le bouton augmente, puis utilisé pour ignorer le survol de plusieurs contrôleurs de vue sur la ligne lorsque l'utilisateur fait sa sélection finale. Il ne semble pas y avoir de moyen pour le contrôleur de vue qui a besoin de ce pointeur d'y arriver, sans faire quelque chose de grossier comme le stocker dans le délégué d'application.

Je ne vois pas d'autres personnes poser cette question, ce qui me porte à croire que j'ai encore une fois oublié quelque chose de simple. S'il te plaît, éclaire-moi!

Répondre

0

Il semble que votre contrôleur de barre d'onglets soit déjà une sous-classe de UITabBarController, ce qui signifie que vous avez déjà du code personnalisé. Je suggère que le contrôleur de la barre d'onglets soit le propriétaire principal du popover, et il est de la responsabilité du contrôleur de vue de tableau d'informer simplement le contrôleur de la barre d'onglets qu'une sélection a été faite. Le contrôleur de barre d'onglets peut répondre à ce message en rejetant le popover. Vous pouvez tirer parti du fait que UIViewController a déjà une méthode pour accéder au contrôleur de barre d'onglets qui contient un contrôleur donné.

Il ressemblerait à quelque chose comme ceci:

@interface MyTabBarController : UITabBarController 
- (void)itemWasSelected; 
@end 

@implementation MyTabBarController { 
    UIPopoverController *popover; 
} 

- (void)itemWasSelected { 
    [popover dismissPopoverControllerAnimated:YES]; 
} 
@end 

////////////// 

@implementation TableController 

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)path { 
    // Do whatever else you want to do 
    MyTabBarController *tabController = (MyTabBarController *)self.tabBarController; 
    [tabController itemWasSelected]; 
} 

Avec cette solution, le contrôleur de table ne pas savoir quoi que ce soit au sujet de la popover; il doit juste savoir qu'il va être présenté à l'intérieur d'un MyTabBarController, ce qui semble une chose raisonnable pour le savoir.

0

Vous pouvez créer une classe singleton pour suivre votre statut de popover, puis la rendre accessible à toutes les classes de manière égale et simple. De cette façon, il pourrait facilement être mis à jour et accessible à partir de n'importe quel code sans avoir à aller directement à surcharger le délégué de l'application même si c'est fondamentalement la même idée mais un peu plus propre dans son propre singleton.

Questions connexes