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.

59voto

Aliaksei N. Points 1678

Devenez délégué de moreNavigationController (il s'agit d'un UINavigationController) et ajoutez ceci :

- (void)navigationController:(UINavigationController *)navigationController
        willShowViewController:(UIViewController *)viewController
        animated:(BOOL)animated {

    UINavigationBar *morenavbar = navigationController.navigationBar;
    UINavigationItem *morenavitem = morenavbar.topItem;
    /* We don't need Edit button in More screen. */
    morenavitem.rightBarButtonItem = nil;
}

Maintenant, il n'apparaît plus. La chose essentielle à considérer est que le bouton Edit n'apparaît pas après la création du contrôleur, mais avant l'affichage de la vue, et nous devrions rester silencieux jusqu'à ce moment et ensuite, lorsque le contrôleur va afficher l'écran, nous ferons disparaître le bouton afin qu'il n'ait pas la possibilité de le créer à nouveau :).

55voto

Ian Terrell Points 6551

customizableViewControllers est un tableau ; lui donner la valeur d'un tableau vide pour désactiver toute modification.

tabBarController.customizableViewControllers = [NSArray arrayWithObjects:nil];

12voto

Wendy Points 61
tabBarController .customizableViewControllers = nil;

6voto

Jian Yu Points 53

J'ai essayé et voici un exemple.

Dans AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Add the tab bar controller's view to the window and display.
    [self.window addSubview:tabBarController.view];
    [self.window makeKeyAndVisible];

    //setting delegate to disable edit button in more.
    tabBarController.moreNavigationController.delegate = self;

    return YES;
}

pour supprimer le bouton "Modifier

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

Dans votre AppDelegate.h

@interface TestAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate, UINavigationControllerDelegate>

Corrigez-moi si je me trompe.

4voto

Andre Oporto Points 31

J'ai réussi à le faire fonctionner avec le code suivant. J'ai créé un CustomTabViewController et j'ai ensuite modifié l'identité de la classe de mon contrôleur de barre d'onglets dans Interface Builder pour utiliser cette classe personnalisée. Voici le code utilisé (contenu des fichiers .h et .m). La clé est de définir la propriété à nil, ce qui fait que le bouton Edit n'est pas affiché. Pour plus de détails, voir : http://developer.apple.com/library/ios/documentation/uikit/reference/UITabBarController_Class/Reference/Reference.html#//apple_ref/occ/instp/UITabBarController/customizableViewControllers "Si le tableau est vide ou si la valeur de cette propriété est nulle, la barre d'onglets ne permet pas de réorganiser les éléments."

#import <UIKit/UIKit.h>

@interface CustomTabBarController : UITabBarController {

}
@end

#import "CustomTabBarController.h"

@implementation CustomTabBarController

- (void)viewDidLoad
{
    self.customizableViewControllers = nil;
    [super viewDidLoad];
}   

@end

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