iOS 在任意界面 Dismiss Keyboard
来源:互联网 发布:淘宝信誉评级是什么 编辑:程序博客网 时间:2024/06/09 20:12
最近由于项目需要,有些时候我们需要在任意时刻dismiss掉键盘。
很自然的我们会想到键盘通知 UIKeyboardDidShowNotification和UIKeyboardDidHideNotification,
通过这两个通知可以知道当前键盘是否可见,如果可见再去dismisss掉。这样的话还需把show the keyboard的元凶找出来。
最笨的方法就是在所有要显示键盘的地方添加代码,然后把相当的组件记录在某一个地方。But你和我都不会笨是吧 :]
如果熟悉respond chain的话,就知道,显示键盘的一定是当前的first responder。
那们就只需要知道当前的first responder就再调用resignFirstResponder就可以了。如下:
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponder = [keyWindow performSelector:
@selector
(firstResponder)];
[firstResponder resignFirstResponder];
是的,你可能已经注意到,window上perform的@selector(firstResponder)是一个私有API。
在链接这里还有其它一些方法。
@implementation
UIView (FindFirstResponder)
- (
id
)findFirstResponder
{
if
(
self
.isFirstResponder) {
return
self
;
}
for
(UIView *subView in
self
.subviews) {
id
responder = [subView findFirstResponder];
if
(responder)
return
responder;
}
return
nil
;
}
@end
iOS 7+
- (
id
)findFirstResponder
{
if
(
self
.isFirstResponder) {
return
self
;
}
for
(UIView *subView in
self
.view.subviews) {
if
([subView isFirstResponder]) {
return
subView;
}
}
return
nil
;
}
总感觉不太优雅,而且如果你的界面用了很多的Child ViewVonroller也不知道会不会可行,如果换成iOS8,iOS9...是否还行。
在万能的google和stackoverflow中终于还是找到了最优雅的方法:
[[UIApplication sharedApplication] sendAction:
@selector
(resignFirstResponder)
to:
nil
from:
nil
forEvent:
nil
];
在苹果的文档中对target解释到:
The object to receive the action message. If target
is nil
, the app sends the message to the first responder, from whence it progresses up the responder chain until it is handled.
=======================
YES, this is what we want!!
- iOS 在任意界面 Dismiss Keyboard
- iPhone dismiss keyboard
- iOS dismiss后 原控制器界面上移解决
- iOS任意界面跳转方法
- present,dismiss到任意控制器
- Dismiss keyboard by touching background of view
- dismiss keyboard when touching outside of textfield
- ios+phonegap跳转到任意界面
- iOS开发runtime实现任意界面跳转
- present,dismiss到任意控制器(二)
- Android如何在任意界面弹出窗口
- swift learning diary: dismiss the keyboard by touching background
- iOS 如何dismiss所有modalViewController
- DialogUtils(material风格,ios风格,传入context构建,在任意界面弹出,以及dialog样式的activity)
- 解决在 iOS 8 中用Storyboard modal UINavigationController不能dismiss的问题
- Reveal逆向工程:分析任意iOS应用的UI界面
- iOS逆向Reveal查看任意app 的界面
- [iOS代码] 获取键盘keyboard所占区域大小,调整界面布局
- 关于vim复制剪贴粘贴命令的总结
- hihoCoder#1089 最短路径·二
- android smartbar适配
- java的反射机制
- C++中的数串转换
- iOS 在任意界面 Dismiss Keyboard
- 研发管理08:敏捷 Scrum 相关基本概念
- 数据结构 - 数组
- MongoDB:too much data for sort() with no index error异常
- 在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端
- android使用ksoap2调用webservice接口返回错误HTTP status: 500
- 【struts2】struts2配置中Action的name和package的name和namespace有什么作用 ?
- poj1873 凸包+枚举
- ffplay的音视频同步分析