2010-12-08 18 views
6

Je suis en train de personnaliser l'affichage "Plus" dans le fichier UITabBarController de mon application. D'après ce que je vois dans les docs, il y a peu de soutien pour le personnaliser. Il n'y a qu'une propriété en lecture seule de l'UITabBarController appelée 'moreNavigationController' qui pointe vers un UINavigationController. Cela nous permet au moins de personnaliser son UINavigationBar. Personnaliser la vue de la table qu'il présente dans la première vue est un peu plus compliqué. Sur d'autres questions ici sur SO et ailleurs, j'ai vu que toute discussion tourne autour de jouer avec la structure interne de moreNavigationController (par exemple en observant que le premier contrôleur de vue dans la pile est un UITableViewController, en échangeant ses données contrôleur, etc.). Le problème est que toutes ces méthodes font des suppositions sur la façon dont se comporte le code non documenté dans l'API, des hypothèses qui ne sont pas à l'épreuve du futur. La seule alternative que je vois ici est de rouler mon propre "plus de contrôleur" personnalisé (en abandonnant la fonctionnalité d'édition pour garder l'implémentation assez simple) et de l'utiliser comme cinquième contrôleur de vue dans l'onglet. Bien sûr, il faut veiller à affecter les contrôleurs de vues suivants au "plus de contrôleur" personnalisé et non au UITabBarController directement (le sous-classement de UITabBarController peut être requis pour appliquer cette règle).Personnalisation de moreNavigationController de UITabBarController

Quelle approche choisiriez-vous? Quelles autres solutions suggéreriez-vous?

Répondre

4

je choisirais de rouler mon propre contrôleur personnalisé pour 3 raisons:

  1. moreViewController est contrôlée par UIKit. Extérieurement, il est très difficile de personnaliser certaines vues et de les contrôler directement. Il y aura des méthodes imprévisibles et des définitions de couche dans moreViewController. Il ne peut pas être basique UITableViewController. Je pense que la personnalisation des classes qui ont des délégués est plus efficace.

  2. Si vous personnalisez moreViewController, vous devrez peut-être publier une nouvelle version de votre application chaque fois qu'Apple publiera de nouveaux iOS. Les développeurs de moreViewController chez Apple peuvent changer la classe entière en quelque chose d'autre. Votre application va donc cesser de répondre.

  3. Ma propre classe, ma propre maison. Je peux faire tout ce que je veux.

4
UIViewController *tbMore = 
    ((UIViewController*) 
    [self.moreNavigationController.viewControllers objectAtIndex:0]); 

int nRows = [((UITableView *)tbMore.view) numberOfRowsInSection:0]; 

for (int i = 0; i < nRows; i++) 
{ 
    UITableViewCell *c = 
     [((UITableView *)tbMore.view) 
     cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 

    // Do any additional customization here! 
}