在iOS中隐藏任何视图的键盘?

时间:2017-05-23 08:57:51

标签: ios uiviewcontroller navigation keyboard mmdrawercontroller

有类似的问题,但它们都是关于哪些视图正在编辑的情况。

在我的情况下,我有一个本地通知,我想在应用程序变为活动状态时隐藏键盘。

同时我有一个涉及MMDrawerController和模态视图的复杂导航。所以我不能只采用最顶层的视图控制器并迭代它的子视图。

如果我不知道当前正在观看的视图,你能解释如何隐藏键盘吗?

3 个答案:

答案 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];