问题
I would like to add an input accessory view to a UITextField while it is the first responder, i.e. showing the keyboard. Apparently, assigning a UIView to the inputAccessoryView property in this state doesn't display this view. I have to first dismiss the keyboard and re-select the UITextField.
Is there a way to add an input accessory view without dismissing and re-selecting?
回答1:
If possible only assign the inputAccessoryView once. If you need it to be customized, and can only determine how very late just before becoming the first responder, then I would still only assign it once. But customize the subviews of the inputAccessoryView in the UITextFieldDelegate method textFieldShouldBeginEditing:. Like so:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
[self setupInputAccessoryViewForTextField:textField];
return YES;
}
回答2:
You can use reloadInputViews on the textView to do that
(I know this is an old post but might help to others)
回答3:
I just wanted an input accessory view added/removed dynamically. I ended up simply doing this:
[self.responceTextView resignFirstResponder];
self.responceTextView.inputAccessoryView = keyBoardToolbar;
[self.responceTextView becomeFirstResponder];
回答4:
EDIT: According to @fabian789 this method doesn't work. YMMV.
You could try calling
[myTextField setNeedsLayout];
[myTextField setNeedsRedraw];
to force it to redraw itself?
Disclaimer : This is just what I would try, I don't know if it will work!
回答5:
I also had to add/remove inputAccessoryView on text change so I ended up changing the inputAccessoryView.alpha value to make it look removed.
The animation is optional but it makes the transition look better:
Swift 4
UIView.animate(withDuration: 0.3) {
myTextFieldOrTextView.inputAccessoryView?.alpha = 0
}
来源:https://stackoverflow.com/questions/5953439/adding-input-accessory-view-to-uitextfield-while-keyboard-is-visible