Adding input accessory view to UITextField while k

2020-07-10 09:33发布

问题:

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      
}