web-dev-qa-db-fra.com

comment désactiver un élément de bouton de la barre de navigation dans iOS

J'ai créé un contrôleur de navigation. Dans la deuxième vue (qui est poussée), j'ai un appel de webservice et plaçant une vue de recouvrement et plaçant 

self.view.userInteractionEnabled = NO ;

Une fois l’appel du service Web terminé, je reviens à 

self.view.userInteractionEnabled = YES ;

Lorsque je fais cela, tous les autres boutons sauf les boutons de la barre de navigation sont désactivés. Comment désactiver ces deux boutons de la barre de navigation? (un bouton similaire au bouton précédent, qui apparaît au premier contrôleur de vue et un autre bouton qui donne des informations sur l'aide).

J'ai essayé d'utiliser self.navigationItem.backBarButtonItem.enabled = NO. Mais je peux quand même appuyer sur le bouton et naviguer vers le premier écran. Comment puis-je désactiver ces deux boutons?

21
Sravan

Essaye ça

Conseillé

self.navigationItem.leftBarButtonItem.enabled = NO;

self.navigationItem.rightBarButtonItem.enabled = NO;

Ou simplement désactiver par 

sur le cas Edge

self.view.window.userInteractionEnabled = NO;

Mise à jour: Récemment, Apple n’a pas autorisé le bouton Précédent à activer/désactiver. Au lieu de cela, nous pouvons le cacher.

self.navigationItem.hidesBackButton = YES;

Vous pouvez effectuer les opérations suivantes si vous exécutez Swift

self.navigationItem.rightBarButtonItem?.enabled = true

Cet extrait désactivera le bouton.

13
Jay Mayu

Désactivez simplement votre interaction avec la vue UINavigationController et la barre de navigation:

self.navigationController.navigationBar.userInteractionEnabled = NO;
self.navigationController.view.userInteractionEnabled = NO;

Et activez-le quand vous en avez besoin:

self.navigationController.navigationBar.userInteractionEnabled = YES;
self.navigationController.view.userInteractionEnabled = YES;
8
jbouaziz

Latest Swift: Pour masquer le bouton de retour, vous DEVEZ utiliser:

self.navigationItem.setHidesBackButton(true, animated: false)

Remarque: Cela peut provoquer un bogue dans la barre de navigation, ce qui peut provoquer l'apparition d'un artefact à la place d'un bouton Précédent masqué lors de la transition vers une vue sans bouton Précédent (ou à la place d'un bouton gauche). L'artefact qui apparaît est soit des ellipses "...", soit le titre du viewController précédent sur la pile. Je pense que ce bogue est lié au bogue documenté dans le projet de code d'exemple d'Apple, "CustomizingUINavigationBar", CustomBackButtonViewController.m

7
ObjectiveTC
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
}
2
user4919266

Pour la version iOS 10.3, Swift 3:

self.navigationItem.rightBarButtonItem?.isEnabled = false.
1
Sagar D

J'ai résolu ce problème en ajoutant simplement une propriété à mon contrôleur de vue:

@property (nonatomic, strong) IBOutlet UIBarButtonItem * RightButton;

Je l'ai ensuite connecté au bouton du storyboard . Vous pouvez ensuite définir ses propriétés comme suit:

self.RightButton.enabled=true;
1
Sjakelien

Mise à jour pour Swift 3:

Si vous souhaitez désactiver un élément de bouton de la barre de navigation OR, vous souhaitez désactiver le trou UINavigationBar, c.-à-d. Tous les éléments présents dans la barre de navigation, utilisez les lignes de code ci-dessous;

// if you want disable
self.navigationController?.navigationBar.isUserInteractionEnabled = false

// if you want enable again
self.navigationController?.navigationBar.isUserInteractionEnabled = true

Profitez ...! 

1
Kiran jadhav

Solution à une ligne  

self.navigationController?.view.isUserInteractionEnabled = false
0
Ghulam Rasool

Ce code devrait fonctionner sur Swift 4.2

self.navigationItem.rightBarButtonItem?.isEnabled = false

Le code ci-dessus désactivera le bouton. Pour l'activer basculer le booléen sur true

0
Kavin Varnan
var menuBtn = new UIButton(UIButtonType.Custom);
menuBtn.Frame = new CGRect(x: 0.0, y: 0.0, width: 20, height: 20);
menuBtn.SetImage(new UIImage("filter"), UIControlState.Normal);

menuBtn.Alpha = 0.05f;   //to set the Alpha

menuBtn.Enabled = false;

testé sur Mvvmcross Xamarin.iOS uniquement

0
Komicon

Essayez ce code:

UIApplication.sharedApplication().beginIgnoringInteractionEvents()

Cela empêchera l'utilisateur d'interagir avec l'application et, après l'appel du service, réécrira ce code:

UIApplication.sharedApplication().endIgnoringInteractionEvents()

Bien sûr, cela aidera.

0
Muhammad Fasi

Les éléments de bouton de la barre de navigation doivent être basculés en les référant via la propriété navigationItem.

Par exemple:

func setupNav() {
    let saveButton = UIBarButtonItem.init(barButtonSystemItem: .save, target: self, action: #selector(onSavePressed))
    navigationItem.rightBarButtonItem = saveButton
    saveButton.isEnabled = false
  }

func validateSave() {
     saveButton.isEnabled = isConditionMet // WON'T work
      navigationItem.rightBarButtonItem.isEnabled = isConditionMet // WORKS!
}
0
Diviyo