有类似的问题,但它们都是关于哪些视图正在编辑的情况。
在我的情况下,我有一个本地通知,我想在应用程序变为活动状态时隐藏键盘。
同时我有一个涉及MMDrawerController
和模态视图的复杂导航。所以我不能只采用最顶层的视图控制器并迭代它的子视图。
如果我不知道当前正在观看的视图,你能解释如何隐藏键盘吗?
答案 0 :(得分:1)
向UIResponder
添加类别:
Get the current first responder without using a private API
static __weak id currentFirstResponder;
@implementation UIResponder (FirstResponder)
+(id)currentFirstResponder {
currentFirstResponder = nil;
[[UIApplication sharedApplication] sendAction:@selector(findFirstResponder:) to:nil from:nil forEvent:nil];
return currentFirstResponder;
}
-(void)findFirstResponder:(id)sender {
currentFirstResponder = self;
}
+(void)hideKeyboard {
id firstResponder = [UIResponder currentFirstResponder];
if([firstResponder respondsToSelector:@selector(endEditing:)]) {
[firstResponder endEditing:YES];
}
}
@end
导入类别并在操作中执行以下操作以隐藏键盘:
if([[UIResponder currentFirstResponder] respondsToSelector:@selector(endEditing:)]) {
[[UIResponder currentFirstResponder] endEditing:YES];
}
通过此解决方案,您无需知道当前正在查看的视图。只需获取当前的第一响应者并致电endEdition:
。当可编辑视图变为编辑时,它将成为第一响应者。
修改强>
根据Vyachaslav Gerchicov的建议,我在类别中添加hideKeyboard
方法。只需致电[UIResponder hideKeyboard];
。
答案 1 :(得分:0)
只需遍历视图即可隐藏键盘并查看view.isFirstResponder
是否为真,然后只需执行view.resignFirstResponder
。
答案 2 :(得分:-1)
您需要获取DrawerViewController的中心面板,并在didReceiveRemoteNotification方法中添加以下代码。
[drawerController.centerViewController.view resignFirstResponder];