Wie eine Schaltfläche ‚Fertig‘ von Navigationsleiste, wenn Tastatur gleitet in deaktivieren?
-
30-09-2019 - |
Frage
Ich glaube, ich kann es nicht deaktivieren kann, weil ich nicht zugreifen kann, dass UIBarButttonItem
programmatisch
(Entweder mit oder viewWithTag rightBarButtonItem
).
Alle Vorschläge (kurz aus der Addition der Schnittstelle ohne IB)?
Als Test habe ich versucht, auch eine Schaltfläche programmatisch hinzufügen (auf der linken Seite der Navigationsleiste), aber es hat Anzeige nicht in der Navigationsleiste.
RELEVANT CODE (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];
}
DETAILS
Ich würde denken, dies ist ein gemeinsamer Fall, weil das getan Taste:
a) eine UIBarButttonItem
von IB Bibliothek Navigationsleiste hinzugefügt, die in einem Scroll-Ansicht ist, dass einige UITextField's
hat.
b) verhält sich wie erwartet (um die vom Benutzer eingegebenen Daten zu speichern usw.), Frankreich
Mit Ausnahme nicht deaktiviert bekommen, wenn Tastatur erscheint.
c) IB> Inspector> Bar-Taste Elementattribute zeigt:
Identifier = FERTIG
Tag = 44
Class = UIBarButtonItem
Lösung
Sie können auf eine Benachrichtigung (UIKeyboardWillShowNotification
) hören gebucht, wenn die Tastatur gleitet in:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
implementieren Dann -keyboardWillShow:
.
-(void)keyboardWillShow {
UIButton *button = self.navigationItem.leftBarButtonItem;
button.enabled = NO;
}
Um die Taste wieder reaktivieren, das gleiche für die UIKeyboardDidHideNotification
Andere Tipps
Sie sollten nur werden mit
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;