使用侧边菜单关闭键盘 MMDrawerController

Close keyboard with Side Menu MMDrawerController

我正在使用 MMDrawerController 作为侧边菜单。当我打开侧边菜单时,我在中心视图中找不到关闭键盘的位置。

我试过了

  1. sideMenuViewControllerviewWillAppear方法中写入[self.view endEditing:YES]

  2. addObserver in centerViewController 调用了 [self.view endEditing:YES]postObserver in sideMenuViewControllerviewWillAppear 方法。

它只是不起作用,导致这样...

有人有解决办法吗?

您没有为此使用观察器,只需为您的 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];
            }
        }];