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?
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;
}
You can use reloadInputViews on the textView to do that
(I know this is an old post but might help to others)
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];
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!
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
}