我的 iOS 应用程序中有一个 UITextField。当用户输入文本并单击 Return 时,键盘会因为调用带有“resignFirstResponder”的 IBAction 而消失。
但是,XCode 不允许我将一条线从 UIView 本身拖到文件所有者。如何将触摸 UIView 的背景与使键盘消失的 IBAction 相关联?
我的 iOS 应用程序中有一个 UITextField。当用户输入文本并单击 Return 时,键盘会因为调用带有“resignFirstResponder”的 IBAction 而消失。
但是,XCode 不允许我将一条线从 UIView 本身拖到文件所有者。如何将触摸 UIView 的背景与使键盘消失的 IBAction 相关联?
您可以使用 UITapGestureRecognizer。请参阅:通过触摸 UITableView 的背景关闭键盘
所以代替tableview,只需将其添加到您的视图中:
UITapGestureRecognizer *gestureRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)] autorelease];
gestureRecognizer.cancelsTouchesInView = NO; //so that action such as clear text field button can be pressed
[self.view addGestureRecognizer:gestureRecognizer];
并有一种隐藏键盘的方法
- (void) hideKeyboard {
[self.view endEditing:YES];
}
您已经注意到,您无法从 UIView 拖动到文件的所有者以将操作与触摸相关联。
解决此问题的方法是将背景视图的类从 更改UIView
为UIControl
并将操作从那里连接到控制器中的方法以停止编辑。
这是因为 UIControl 可以响应触摸事件,而 UIView 不能,但 UIControl 是 UIView 的子类,因此它可以用来代替 UIView。
不久前我写了一个使用这种技术的示例项目。看看secondViewController
's xib 文件,看看我是如何更改背景视图的类并将其连接到控制器中的一个动作以关闭键盘的。
使用 touchesBegan 和 Event 并在视图上结束编辑:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
一种简单的方法是在视图后面创建一个大的透明 UIButton。