使用侧边菜单关闭键盘 MMDrawerController
Close keyboard with Side Menu MMDrawerController
我正在使用 MMDrawerController 作为侧边菜单。当我打开侧边菜单时,我在中心视图中找不到关闭键盘的位置。
我试过了
在sideMenuViewController
的viewWillAppear
方法中写入[self.view endEditing:YES]
。
addObserver
in centerViewController
调用了 [self.view endEditing:YES]
和 postObserver
in sideMenuViewController
的 viewWillAppear
方法。
它只是不起作用,导致这样...
有人有解决办法吗?
您没有为此使用观察器,只需为您的 UITextField 使用 IBOutlet 属性 说 "textfield".
[self.textfield resignFirstResponder];
在 sideMenuViewController 的 viewWillAppear 时添加此行。
我找到了解决方案
在您的 CentralView 控制器中
#pragma mark - Button Handlers
-(void)leftDrawerButtonPress:(id)sender{
[self.mm_drawerController toggleDrawerSide:MMDrawerSideLeft animated:YES completion:nil];
[self.textfield resignFirstResponder];
}
试试这个方法。它对我有用
今天遇到了同样的问题:)
我花了几个小时调试 MMDrawer 库,并且找到了某种解决方案。我的解决方案包含两个步骤:
1) 在MMDrawerController.m
文件-方法的实现中:-(void)toggleDrawerSide:(MMDrawerSide)drawerSide animated:(BOOL)animated completion:(void (^)(BOOL finished))completion
在方法的开头添加如下代码:[self.centerViewController.view endEditing:true];
。使用此代码,您可以在点击菜单汉堡时关闭键盘 - 所有作为当前 centerViewController 子视图的视图都会尝试 resignFirstResponder。
2) 在MMDrawerController.m
文件-方法的实现中:-(void)panGestureCallback:(UIPanGestureRecognizer *)panGesture
将case UIGestureRecognizerStateBegan的else语句替换为如下代码:
else {
//hide keyboard when pan gesture start
[self.centerViewController.view endEditing:true];
self.startingPanRect = self.centerContainerView.frame;
}
我给你旧代码 - 来自图书馆只是为了更详细的解释:
else {
self.startingPanRect = self.centerContainerView.frame;
}
使用此代码,您可以在开始平移手势时关闭键盘,如果侧边菜单允许这样的平移手势 - 当前 centerViewController 的子视图的所有视图都会尝试 resignFirstResponder。
P.S。我试图将这段代码放在另一种方法中,但由于 centerViewController 移动完成后的动画完成块,它的行为有点奇怪。所以我认为 endEditing:
开头的平移手势是正确的选择。
希望对您有所帮助!
对于使用手势打开抽屉仍然有问题的任何人,请使用以下代码:
将代码放在初始化抽屉控制器的位置。
[self.drawerController setGestureCompletionBlock:^(MMDrawerController *drawerController, UIGestureRecognizer *gesture) {
// hide the keyboard when the gesture completes
if(drawerController.openSide == MMDrawerSideLeft) {
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
}
}];
我正在使用 MMDrawerController 作为侧边菜单。当我打开侧边菜单时,我在中心视图中找不到关闭键盘的位置。
我试过了
在
sideMenuViewController
的viewWillAppear
方法中写入[self.view endEditing:YES]
。addObserver
incenterViewController
调用了[self.view endEditing:YES]
和postObserver
insideMenuViewController
的viewWillAppear
方法。
它只是不起作用,导致这样...
有人有解决办法吗?
您没有为此使用观察器,只需为您的 UITextField 使用 IBOutlet 属性 说 "textfield".
[self.textfield resignFirstResponder];
在 sideMenuViewController 的 viewWillAppear 时添加此行。
我找到了解决方案
在您的 CentralView 控制器中
#pragma mark - Button Handlers
-(void)leftDrawerButtonPress:(id)sender{
[self.mm_drawerController toggleDrawerSide:MMDrawerSideLeft animated:YES completion:nil];
[self.textfield resignFirstResponder];
}
试试这个方法。它对我有用
今天遇到了同样的问题:)
我花了几个小时调试 MMDrawer 库,并且找到了某种解决方案。我的解决方案包含两个步骤:
1) 在MMDrawerController.m
文件-方法的实现中:-(void)toggleDrawerSide:(MMDrawerSide)drawerSide animated:(BOOL)animated completion:(void (^)(BOOL finished))completion
在方法的开头添加如下代码:[self.centerViewController.view endEditing:true];
。使用此代码,您可以在点击菜单汉堡时关闭键盘 - 所有作为当前 centerViewController 子视图的视图都会尝试 resignFirstResponder。
2) 在MMDrawerController.m
文件-方法的实现中:-(void)panGestureCallback:(UIPanGestureRecognizer *)panGesture
将case UIGestureRecognizerStateBegan的else语句替换为如下代码:
else {
//hide keyboard when pan gesture start
[self.centerViewController.view endEditing:true];
self.startingPanRect = self.centerContainerView.frame;
}
我给你旧代码 - 来自图书馆只是为了更详细的解释:
else {
self.startingPanRect = self.centerContainerView.frame;
}
使用此代码,您可以在开始平移手势时关闭键盘,如果侧边菜单允许这样的平移手势 - 当前 centerViewController 的子视图的所有视图都会尝试 resignFirstResponder。
P.S。我试图将这段代码放在另一种方法中,但由于 centerViewController 移动完成后的动画完成块,它的行为有点奇怪。所以我认为 endEditing:
开头的平移手势是正确的选择。
希望对您有所帮助!
对于使用手势打开抽屉仍然有问题的任何人,请使用以下代码:
将代码放在初始化抽屉控制器的位置。
[self.drawerController setGestureCompletionBlock:^(MMDrawerController *drawerController, UIGestureRecognizer *gesture) {
// hide the keyboard when the gesture completes
if(drawerController.openSide == MMDrawerSideLeft) {
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
}
}];