Personnalisation du menu Plus sur un Onglet de la barre de
Je suis l'aide d'une barre d'onglet (UITabBarController) sur mon application, et je souhaite personnaliser l'apparence de la table qui s'affiche lorsque vous cliquez sur le bouton plus.
J'ai travaillé sur la façon de modifier l'apparence de la barre de Navigation qui se trouve sur le grand écran par la mise en
self.moreNavigationController.navigationBar.barStyle
dans une sous-classe de UITabBarController et j'ai réussi à changer la couleur de fond de la table en modifiant
self.moreNavigationController.topViewController.view.backgroundColor
mais je ne peux pas travailler sur la façon de changer la couleur de la police dans les cellules qui apparaissent sur la table.
J'espérais que je pourrais utiliser
self.moreNavigationController.topViewController.view.visibleCells
mais cela semble toujours être vide. J'ai essayé de faire cela dans le viewDidLoad, viewWillAppear et viewDidAppear, sans succès. L'objet de l'auto.moreNavigationController.topViewController est de type UIMoreListController, qui semble être sans-papiers, et je ne vois rien du tout évident dans l'interface qui va m'aider.
Des idées?
Vous devez vous connecter pour publier un commentaire.
visibleCells est peuplé seulement après la moreNavigationController est affiché.
Et les cellules sont créées au moment de l'exécution, de sorte que même si vous modifiez le contenu des cellules, ils sont remplacés lorsqu'ils sont affichés.
Une chose à essayer est de remplacer la source de données de la moreNavigationController tableView, appelez le cellForRowAtIndexPath de l'origine de la source de données et modifier son contenu avant de le retourner.
À l'aide du code ci-dessous, après avoir affiché une fois la moreNavigationController pour l'initialiser, vous verrez que lorsque vous revenez à la moreNavigationController, les cellules sont rouges, mais de revenir immédiatement à l'arrière-plan blanc.
La suite de Stephan est de la suggestion de remplacer la source de données de la moreNavigationController, voici une rapide vue d'ensemble du code que j'ai mis en œuvre.
J'ai créé une nouvelle classe appelée MoreTableViewDataSource qui met en œuvre la UITableViewDataSource protocole. Le contrôleur de la page plus utilise pour construire la table est appelé le UIMoreListControllerModern, et cela met en œuvre juste le nécessaire, les pièces de la UITableViewDataSource protocole. Ma mise en œuvre ressemble à ceci.
et puis dans mon CustomTabBarController classe je remplace le viewDidLoad comme suit:
Comme demandé voici les fichiers d'en-tête
et
cell.textLabel.text = @"test";
. Mais il ne fonctionne pas, je ne peux pas le changer. Comment puis-je faire cela?Grâce à Inconnu.
À la suite de sa solution, je vais mettre son code Swift.
Seulement ce que vous devez faire plus, c'est de créer MoreTableViewCell classe et juste. Vous n'avez pas à utiliser la table de montage séquentiel. Si vous souhaitez modifier tableView vous pouvez le faire dans customizeMoreTableView méthode.
J'ai suivi Ian mise en œuvre de personnaliser le menu Plus, mais j'ai eu un problème de rétention de personnalisations après un avertissement de mémoire. didReceiveMemoryWarning semble détruire la UITableView, et quand il est régénéré, il obtient son ancienne source de données de retour. Voici ma solution:
- Je remplacer viewDidLoad sur le CustomTabBarController avec ceci:
Comme vous pouvez le voir, j'ai ajouté un peu de propriétés pour stocker des choses dont j'avais besoin. Ceux-ci doivent être ajoutés à l'en-tête et synthétisés. J'ai aussi fait CustomTabBarController un UINavigationControllerDelegate dans l'en-tête. Voici la fonction de délégué, j'ai ajouté:
De cette façon, je sais que mes sources de données personnalisées est toujours utilisé, car j'ai mis de cette façon juste avant l'affichage de la UIMoreListController, à chaque fois qu'il est montré.