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?
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.
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;
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
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
}
Pour la version iOS 10.3, Swift 3:
self.navigationItem.rightBarButtonItem?.isEnabled = false.
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;
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 ...!
Solution à une ligne
self.navigationController?.view.isUserInteractionEnabled = false
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
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
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.
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!
}