我正在使用 textFieldDidBeginEditing 方法为我的文本字段制作自定义输入视图
textField.inputView =wView;
有一个按钮,我想使用它来取回键盘而不是我的自定义输入视图。任何想法如何做到这一点。
如果没有其他办法,我想尝试将文本字段作为第一响应者并再次使其成为第一响应者。但这确实会使我的项目复杂化。我想知道有没有其他方法。
我正在使用 textFieldDidBeginEditing 方法为我的文本字段制作自定义输入视图
textField.inputView =wView;
有一个按钮,我想使用它来取回键盘而不是我的自定义输入视图。任何想法如何做到这一点。
如果没有其他办法,我想尝试将文本字段作为第一响应者并再次使其成为第一响应者。但这确实会使我的项目复杂化。我想知道有没有其他方法。
事情发生了很大变化,因为我早在 2012 年就写了这个答案,@yoooriii 提到的推荐方法是:
myTextField.inputView = nil
myTextField.reloadInputViews()
改用这个:
-reloadInputViews (UIResponder)
当 textField 已经是第一响应者(屏幕上的键盘)时,我可以切换回默认键盘的解决方案将他的 inputView 设置为 nil,而不是像这样调用 reloadInputViews:
textField.inputView = nil;
[textField reloadInputViews];
希望这可以帮助。
您需要创建一个不为零的 inputView。正如苹果帮助所说:
如果此属性中的值为 nil,则文本字段在成为第一响应者时显示标准系统键盘。将自定义视图分配给此属性会导致显示该视图。
此属性的默认值为 nil。
要实现它:
创建一个像苹果这样的属性说:
@property(readwrite, strong) UIView *inputView;
启动它:
self.inputView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
将其分配给您的 textField 或 textView 的 inputView:
[textView setInputView:self.inputView];
重新加载所有输入视图:
[textView reloadInputViews];
你可以这样做textViewDidBeginEditing
:
- (void)textViewDidBeginEditing:(UITextView *)textView {
self.inputView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
[textView setInputView:self.inputView];
[textView reloadInputViews];
}
如果您在其中有一个工具栏的文本字段中使用 datePicker,请执行以下操作以取回您的输入视图。
斯威夫特 3、4、5:
textField.inputView = nil
textField.inputAccessoryView = nil
textField.reloadInputViews()