有没有方法能在触摸文本框之外时让键盘消失?
原问题:iphone, dismiss keyboard when touching outside of textfield
有没有方法能在触摸文本框之外时让键盘消失?
原问题:iphone, dismiss keyboard when touching outside of textfield
如果界面不复杂你可以在View中添加一个Button,设置成Custom类型,再将它置于最底层,并为这个Button添加事件。在事件中讲键盘隐藏。如果界面很复杂,可供点击的区域并不多,可以考虑在键盘上方放置一个隐藏按钮。其次,实现TextField的DidEndOnExit事件,在该事件中隐藏键盘。
2 回答1k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答2.7k 阅读
1 回答1.5k 阅读
1 回答1.4k 阅读
1.7k 阅读
1 回答1.1k 阅读
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]好,因为屏幕上可能有很多文本框,这个对所有都有效。