我有一个UITextView,我正在听一个UIButton事件来对这个textView中的文本采取行动:
- (IBAction)buttonClicked {
NSString *text = myTextView.text;
//Do some work with the text.
myTextView.text = @""; //reset the textView.
}
我不希望textView为resignFirstResponder
。我面临的问题是:当最后输入的字符是符号时,键盘卡在该视图上,并且不会重置为默认键盘字母视图,消息应用程序和其他应用程序中的行为也是如此。如何以此方法以编程方式重置键盘?
这可能是this question的重复问题。但答案对我来说似乎没有用。
这是接受的答案:
[editingField setKeyboardType:UIKeyboardTypeNumberPad];
[editingField reloadInputViews];
这是最后一条评论:
好的,显然将其声明为UITextView而不是UIResponder会影响它在运行时的行为方式。这实际上是我所做的唯一改变,它现在有效。感谢。
但我似乎无法理解使其发挥作用的微小变化是什么,因为我仍然在努力解决这个问题。
我已经尝试了resignFirstResponder
和becomeFirstResponder
,但是在快速连续中,后面的scrollableView不是根据keyboardWillShow
事件设置的。我也试过[textView setKeyboardAppearance:UIKeyboardAppearanceDefault]
,但仍然没有变化。
是否有任何API方法可以执行此操作(例如键盘在自动点击'空格'时重置)?
答案 0 :(得分:2)
我使用的hack是使用隐藏的textField来重新加载inputView。
代码:
UITextField *hiddenTextField = [[UITextField alloc] init];
[superView addSubview:hiddenTextField];
[hiddenTextField becomeFirstResponder];
[hiddenTextField reloadInputViews];
[textView_ becomeFirstResponder];
[hiddenTextField removeFromSuperview];
[hiddenTextField release];
答案 1 :(得分:1)
我不使用临时文本字段。我只是在文本视图中resignFirstResponder
并立即becomeFirstResponder
。如果两个调用一个接一个地立即完成,则不会发生键盘滑动动画。
所以我的buttonClicked函数看起来像这样:
- (IBAction)buttonClicked {
NSString *text = myTextView.text;
//Do some work with the text.
myTextView.text = @""; //reset the textView.
// Reset keyboard back to QWERTY side
[myTextView resignFirstResponder];
[myTextView becomeFirstResponder];
}
作为旁注,不幸的是,即使没有动画发生,键盘通知(例如UIKeyboardWillShowNotification
,UIKeyboardWillHideNotification
等)仍会被调用。我只是在resignFirstResponder
之前设置一个标志来通知我的键盘隐藏/显示通知回调以跳过执行。在我becomeFirstResponder
之后,我清除了那个标志,所以当键盘确实滑开时,通知回调可以正常执行。
答案 2 :(得分:0)
self.textField.keyboardType = UIKeyboardTypeAlphabet;
[self.textField reloadInputViews];