触摸键盘辞职

时间:2012-02-05 19:48:45

标签: iphone ios xcode ipad

我发现一些代码可以帮助我在用户触摸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的视图之外进行触摸有一点问题。)谢谢

1 个答案:

答案 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];
}