【发布时间】:2012-04-23 23:10:12
【问题描述】:
我的 iOS 应用中有一个 UITextField。当用户输入文本并单击 Return 时,键盘会因为调用带有“resignFirstResponder”的 IBAction 而消失。
但是,XCode 不允许我将一条线从 UIView 本身拖到文件所有者。如何将触摸 UIView 的背景与使键盘消失的 IBAction 相关联?
【问题讨论】:
标签: objective-c ios xcode
我的 iOS 应用中有一个 UITextField。当用户输入文本并单击 Return 时,键盘会因为调用带有“resignFirstResponder”的 IBAction 而消失。
但是,XCode 不允许我将一条线从 UIView 本身拖到文件所有者。如何将触摸 UIView 的背景与使键盘消失的 IBAction 相关联?
【问题讨论】:
标签: objective-c ios xcode
您可以使用 UITapGestureRecognizer。见:Dismiss keyboard by touching background of 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。
我不久前写了一个example project,它使用了这种技术。查看secondViewController 的xib 文件,了解我如何更改背景视图的类并将其连接到控制器中的一个动作以关闭键盘。
【讨论】:
使用 touchesBegan 和 Event 并在视图上结束编辑:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
【讨论】:
一种简单的方法是在视图后面创建一个大的透明 UIButton。
【讨论】: