0

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

就我而言,我有一个本地通知,我想在应用程序激活时隐藏键盘。

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

如果我不知道当前查看的视图,您能解释一下如何隐藏键盘吗?

4

3 回答 3

1

将类别添加到UIResponder在不使用私有 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];

于 2017-05-23T09:12:43.803 回答
0

只需遍历您想要隐藏键盘的视图并检查view.isFirstResponder其是否为真然后简单地执行view.resignFirstResponder

于 2017-05-23T09:10:12.880 回答
-1

您需要获取 DrawerViewController 的中心面板并从 didReceiveRemoteNotification 方法添加以下代码。

[drawerController.centerViewController.view resignFirstResponder];
于 2017-05-23T09:37:42.583 回答