Come disattivare un pulsante 'Fatto' dalla barra di navigazione quando slide della tastiera in?
-
30-09-2019 - |
Domanda
Credo che non posso disattivarlo perché non può accedere che UIBarButttonItem
programmazione
(Sia con viewWithTag o rightBarButtonItem
).
Qualche suggerimento (brevi di aggiungere l'interfaccia senza IB)?
Come prova, ho anche provato ad aggiungere un pulsante di programmazione (a sinistra della barra di navigazione), ma non ha visualizzato nella barra di navigazione.
relativo codice (In 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];
}
DETTAGLI
Vorrei che questo sia un caso comune in quanto tale pulsante Done:
a) è un UIBarButttonItem
aggiunte dalla IB Biblioteca alla barra di navigazione che si trova in una vista di scorrimento che ha qualche UITextField's
.
b) si comporta come previsto (per salvare i dati inseriti dall'utente, ecc),
Tranne che per non ottenere disabilitata quando appare la tastiera.
c) IB> Ispettore> Bar Pulsante Attributi elemento spettacoli:
Identifier =
Done
Tag = 44
Class = UIBarButtonItem
Soluzione
È possibile ascoltare una notifica (UIKeyboardWillShowNotification
) ha registrato quando le diapositive della tastiera in:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
Quindi implementare -keyboardWillShow:
.
-(void)keyboardWillShow {
UIButton *button = self.navigationItem.leftBarButtonItem;
button.enabled = NO;
}
Per riattivare nuovamente il pulsante, fare lo stesso per la UIKeyboardDidHideNotification
Altri suggerimenti
Si dovrebbe solo utilizzare
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;