触摸键盘即可

我发现一些代码可以帮助我在用户从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类,但是如何使用[touch view]触及speechBubble的视图之外,我会遇到一些问题。)

我刚才发现的一些可能对你有用的东西是:

 [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]; }