25 votes

Comment désactiver le bouton d'édition qui apparaît dans la section more d'un UITabBarController ?

Dans mon application (basée sur le modèle XCode Tab bar application), j'utilise un UITabBarController pour afficher une liste des différentes sections de l'application auxquelles l'utilisateur peut accéder.

Par défaut, le contrôleur UITabBarController affiche un bouton "Plus" dans la barre d'onglets lorsqu'il y a plus de 5 éléments. Il permet également à l'utilisateur de sélectionner les éléments qu'il souhaite voir apparaître dans la barre d'onglets.

Actuellement, je ne peux pas mettre en œuvre l'enregistrement et le chargement de l'état du contrôleur de la barre d'onglets, et je veux donc désactiver le bouton "Modifier".

Existe-t-il un moyen de désactiver/masquer le bouton de la barre "Edit" qui apparaît sur le contrôleur de navigation "More" de UITabBarController ?

J'ai essayé :

tabBarController.moreNavigationController.navigationBar.topItem.rightBarButtonItem = nil;

y

tabBarController.moreNavigationController.navigationBar.topItem.rightBarButtonItem.enabled = NO;

mais ils ne semblent pas fonctionner.

1voto

Bao Lei Points 101

La réponse d'Aleks N fonctionne, mais j'aimerais la modifier quelque peu

- (void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
    if (navigationController.viewControllers.count == 1)
    {
        UINavigationBar *morenavbar = navigationController.navigationBar;
        UINavigationItem *morenavitem = morenavbar.topItem;
        /* We don't need Edit button in More screen. */
        morenavitem.rightBarButtonItem = nil;
    }
}

Cette méthode déléguée est appelée à chaque fois qu'un contrôleur de vue est placé ou retiré de la pile de vues. Lorsque nous poussons d'autres vues sur ce contrôleur de vue "More", nous ne voulons pas faire cela.

1voto

rubybeginner Points 19

A ceux qui travaillent avec Xcode supérieur à 4.0 (je travaille sur Xcode 4.2 pour Snow Leopard) :

Vérifiez d'abord où vous avez modifié le tableau des vues la dernière fois. Je pense que la méthode dans laquelle vous mettez votre tableau de vues personnalisables à nil n'a pas d'importance. La description d'Apples dit :

Important : L'ajout ou la suppression de contrôleurs de vue dans votre interface de barre d'onglets réinitialise également le tableau des contrôleurs de vue personnalisables à la valeur par défaut, ce qui permet de personnaliser à nouveau tous les contrôleurs de vue. Par conséquent, si vous modifiez la propriété viewControllers (soit directement, soit en appelant la méthode setViewControllers:animated :) et que vous souhaitez toujours limiter les contrôleurs de vue personnalisables, vous devez également mettre à jour le tableau d'objets dans la propriété customizableViewControllers.

Cela a fonctionné pour moi, alors n'hésitez pas à l'essayer. J'ai trouvé cette description ici : lien vers la description sur developer.apple.com au chapitre "Empêcher la personnalisation des onglets".

1voto

Anthony F Points 1371

Sur un iPhone 6 Plus, la barre d'onglets comporte plus de boutons en mode paysage qu'en mode portrait. Malheureusement, cela signifie que le tableau CustomizableViewControllers est réinitialisé à chaque fois que l'appareil est tourné, et aucune des réponses données ici n'a fonctionné pour moi.

J'avais déjà ma propre sous-classe UITabBarController et surcharger les méthodes setter et getter pour les customizableViewControllers était le seul moyen fiable de supprimer le bouton Edit de l'écran More :

- (NSArray *)customizableViewControllers
{
    return nil;
}

- (void)setCustomizableViewControllers:(NSArray*)controllers
{
    //do nothing
}

0voto

Alejandro Luengo Points 433

La seule solution qui a fonctionné pour moi

self.moreNavigationController.navigationBar.topItem?.rightBarButtonItem?.title = ""
self.moreNavigationController.navigationBar.topItem?.rightBarButtonItem?.isEnabled = false

0voto

Chris Points 1420

J'ai essayé la plupart de ces solutions et j'ai rencontré un problème où le bouton d'édition revenait lors de la rotation de l'appareil. La rotation revenait au premier contrôleur de vue, puis lorsque je revenais au contrôleur de vue plus, le bouton d'édition était là. La meilleure solution a été de transformer le contrôleur de vue UITabBarControllerDelegate et de mettre le bouton de la barre de droite à zéro à chaque fois que le contrôleur de vue more est devenu le contrôleur de vue sélectionné. Cela fonctionne pour iOS 11-12.

final class DashboardController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        delegate = self
    }
}

extension DashboardController: UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        if viewController == moreNavigationController {
            moreNavigationController.navigationBar.topItem?.rightBarButtonItem = nil
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X