扫码关注官方订阅号
有没有方法能在触摸文本框之外时让键盘消失?
原问题:iphone, dismiss keyboard when touching outside of textfield
Jensen2k 你需要添加一个UITapGestureRecogniser并且指定到视图,然后在选择器调用文本框拒绝第一个响应。 代码: viewDidLoad的:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; [self.view addGestureRecognizer:tap];
dismissKeyboard的:
-(void)dismissKeyboard { [aTextField resignFirstResponder]; }
Joey Tiell 我看到有些人使用UITapGestureRecognizer方法时遇到一些问题。在保留现存按钮敲击行为的完整性的同时,实现这个功能的最简单的方式是在Jensen2k的回答中添加一行代码:
[tap setCancelsTouchesInView:NO];
这能在不使用Dmitry Sitnikov的函数的情况下雨荨现存按钮继续发挥作用。 阅读一下这个资源 (搜索CancelsTouchesInView):UIGestureRecognizer Class Reference 我不去确定它怎样协同滚动条工作,因为我看到了一些问题,其他人也有可能遇到类似的情况。
Prasad 看看这个,或许这是最简单的方式:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES];// this will do the trick }
Dmitry Sitnikov 给UIView一个UIControl(在界面生成器里)的实例或许会更好。然后连接"Touch Up Inside"事件到dismissKeyboard函数。这个IBAction看起来是这个样子的:
- (IBAction)dismissKeyboard:(id)sender { [aTextBox resignFirstResponder]; }
Mr H 看看这个怎么样,我知道这是个老方法,但是或许管用:
-(void)touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event { NSArray *subviews = [self.view subviews]; for (id objects in subviews) { if ([objects isKindOfClass:[UITextField class]]) { UITextField *theTextField = objects; if ([objects isFirstResponder]) { [theTextField resignFirstResponder]; } } } }
Enzo Tran 我认为最简单,也是最好的方式是继承全局视图,使用hitTest:withEvent函数来监听任何触摸。键盘上的触摸是没有注册的,所以只有在你触摸/滚动/强击...别的地方的时候才调用hitTest:withEvent,然后调用[self endEditing:YES]。 这比用touchesBegan更好,因为当你点击视图顶部的按钮时touchesBegan是不会被调用的。这也比UITapGestureRecognizer方法好,因为UITapGestureRecognizer不能识别滚动手势等。这还比暗化界面好,因为在动态复杂的用户界面上,不是在任何地方都可以暗化界面的。除此之外,它还不能阻止其他操作,你不需要在外部轻按两次来选择一个按钮(比如UIPopover)。 另外,这比调用[textField resignFirstResponder]好,因为屏幕上可能有很多文本框,这个对所有都有效。
如果界面不复杂你可以在View中添加一个Button,设置成Custom类型,再将它置于最底层,并为这个Button添加事件。在事件中讲键盘隐藏。如果界面很复杂,可供点击的区域并不多,可以考虑在键盘上方放置一个隐藏按钮。其次,实现TextField的DidEndOnExit事件,在该事件中隐藏键盘。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Jensen2k
你需要添加一个UITapGestureRecogniser并且指定到视图,然后在选择器调用文本框拒绝第一个响应。
代码:
viewDidLoad的:
dismissKeyboard的:
Joey Tiell
我看到有些人使用UITapGestureRecognizer方法时遇到一些问题。在保留现存按钮敲击行为的完整性的同时,实现这个功能的最简单的方式是在Jensen2k的回答中添加一行代码:
这能在不使用Dmitry Sitnikov的函数的情况下雨荨现存按钮继续发挥作用。
阅读一下这个资源 (搜索CancelsTouchesInView):
UIGestureRecognizer Class Reference
我不去确定它怎样协同滚动条工作,因为我看到了一些问题,其他人也有可能遇到类似的情况。
Prasad
看看这个,或许这是最简单的方式:
Dmitry Sitnikov
给UIView一个UIControl(在界面生成器里)的实例或许会更好。然后连接"Touch Up Inside"事件到dismissKeyboard函数。这个IBAction看起来是这个样子的:
Mr H
看看这个怎么样,我知道这是个老方法,但是或许管用:
Enzo Tran
我认为最简单,也是最好的方式是继承全局视图,使用hitTest:withEvent函数来监听任何触摸。键盘上的触摸是没有注册的,所以只有在你触摸/滚动/强击...别的地方的时候才调用hitTest:withEvent,然后调用[self endEditing:YES]。
这比用touchesBegan更好,因为当你点击视图顶部的按钮时touchesBegan是不会被调用的。这也比UITapGestureRecognizer方法好,因为UITapGestureRecognizer不能识别滚动手势等。这还比暗化界面好,因为在动态复杂的用户界面上,不是在任何地方都可以暗化界面的。除此之外,它还不能阻止其他操作,你不需要在外部轻按两次来选择一个按钮(比如UIPopover)。
另外,这比调用[textField resignFirstResponder]好,因为屏幕上可能有很多文本框,这个对所有都有效。
如果界面不复杂你可以在View中添加一个Button,设置成Custom类型,再将它置于最底层,并为这个Button添加事件。在事件中讲键盘隐藏。如果界面很复杂,可供点击的区域并不多,可以考虑在键盘上方放置一个隐藏按钮。其次,实现TextField的DidEndOnExit事件,在该事件中隐藏键盘。