Comment désactiver un bouton « Terminé » de la barre de navigation lorsque les diapositives de clavier dans?
-
30-09-2019 - |
Question
Je crois que je ne peux pas le désactiver, car je ne peux pas l'accès que UIBarButttonItem
programme
(Soit viewWithTag ou rightBarButtonItem
).
Toutes les suggestions (court d'ajouter l'interface sans IB)?
En guise de test, j'ai aussi essayé d'ajouter un bouton programme (à gauche de la barre de navigation), mais il n'a pas afficher dans la barre de navigation.
CODE EN CAUSE (Dans MyEditorViewControler.m
):
- (void)textFieldDidBeginEditing:(UITextField *)sender { //successfully executes when keyboard slides in
UINavigationItem *item = self.navigationItem; //item = 0x6420e0 OK. (value at debugger breakpoints)
UIBarButtonItem *doneButton4 = (UIBarButtonItem *) [self.view viewWithTag:44]; //doneButton4 = 0x0, not OK.
doneButton4.enabled = NO;
}
- (void)textFieldDidEndEditing:(UITextField *)sender { //successfully executes when keyboard slides out.
...
UIButton* doneButton = (UIButton *)[self.view viewWithTag:44]; //Attempt to re-enable button.
doneButton.enabled = YES;
}
- (void)viewDidLoad { //Attempt to programmatically add a *left* button to the nav bar. Result: Button does not display in nav bar.
....
UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
self.navigationItem.leftBarButtonItem = leftBarButtonItem;
[leftBarButtonItem release];
}
Détails
Je pense que cela est une affaire commune parce que ce bouton disgnostic
a) est un UIBarButttonItem
ajouté de la bibliothèque IB à la barre de navigation qui est dans une vue de défilement qui a un certain UITextField's
.
b) se comporte comme prévu (pour enregistrer les données entrées par l'utilisateur, etc.),
à l'exception de ne pas avoir désactivé lorsque le clavier apparaît.
c) IB> Inspecteur> barre de boutons Attributs d'élément montre:
Identifier =
Terminé
Tag = 44
Class = UIBarButtonItem
La solution
Vous pouvez écouter une notification (UIKeyboardWillShowNotification
) affiché lorsque les diapositives de clavier dans:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
Ensuite, mettre en œuvre -keyboardWillShow:
.
-(void)keyboardWillShow {
UIButton *button = self.navigationItem.leftBarButtonItem;
button.enabled = NO;
}
Pour réactiver à nouveau sur le bouton, faire la même chose pour le UIKeyboardDidHideNotification
Autres conseils
Vous devez juste utiliser
UIBarButtonItem *doneButton = self.navigationItem.leftBarButtonItem;
doneButton.enabled = YES;
//Both of these should work, you shouldn't need any type of IBOutlets for this
UINavigationItem *item = self.navigationItem;
UIBarButtonItem *doneButton = item.leftBarButtonItem;