在任何视图中隐藏 iOS 中的键盘?
Hide keyboard in iOS for any view?
有类似的问题,但都是关于知道哪个视图正在编辑的情况。
在我的例子中,我有一个本地通知,我想在应用程序激活时隐藏键盘。
与此同时,我有一个涉及 MMDrawerController
和模态视图的复杂导航。所以我不能只使用最顶层的视图控制器并迭代它的子视图。
如果我不知道当前正在查看的视图,您能解释一下如何隐藏键盘吗?
只需遍历您想为其隐藏键盘的视图并检查 view.isFirstResponder
如果它为真,然后只需执行 view.resignFirstResponder
.
将类别添加到 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];
.
您需要获取 DrawerViewController 的中心面板并从 didReceiveRemoteNotification 方法中添加以下代码。
[drawerController.centerViewController.view resignFirstResponder];
有类似的问题,但都是关于知道哪个视图正在编辑的情况。
在我的例子中,我有一个本地通知,我想在应用程序激活时隐藏键盘。
与此同时,我有一个涉及 MMDrawerController
和模态视图的复杂导航。所以我不能只使用最顶层的视图控制器并迭代它的子视图。
如果我不知道当前正在查看的视图,您能解释一下如何隐藏键盘吗?
只需遍历您想为其隐藏键盘的视图并检查 view.isFirstResponder
如果它为真,然后只需执行 view.resignFirstResponder
.
将类别添加到 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];
.
您需要获取 DrawerViewController 的中心面板并从 didReceiveRemoteNotification 方法中添加以下代码。
[drawerController.centerViewController.view resignFirstResponder];