我发现一些代码可以帮助我在用户触摸UITextView元素的屏幕时重新键盘。
以下是它的外观:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
if([self.speechBubble.speechText isFirstResponder] && [touch view] != self.speechBubble.speechText){
[self.speechBubble.speechText resignFirstResponder];
}
[super touchesBegan:touches withEvent:event];
}
到目前为止,这种方法非常有效,如果用户触摸文本视图之外的任何位置,它将删除键盘。但是,它只适用于我正在运行它的特定对象,所以如果我有两个speechBubbles,它将无法工作。
如何更改此设置以便任何speechBubble具有相同的效果? (我可以将此代码从我的ViewController移动到我的SpeechBubble类,但是我对如何使用[触摸视图]在speechBubble的视图之外进行触摸有一点问题。)谢谢
答案 0 :(得分:3)
我刚刚发现的可能对你有用的东西是:
[self.view endEditing:YES];
它将从当前拥有它的任何元素中撤回第一响应者,而无需您自己手动跟踪它。
参考您的示例代码,这样的内容可能会有效,具体取决于您的speechBubbles如何工作:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
// Note the '!':
if(![[touch view] class] isKindOfClass [speechBubble class]]){
// It's not a bubble they touched, dismiss the keyboard:
[self.view endEditing:YES];
}
[super touchesBegan:touches withEvent:event];
}