使用Side Menu MMDrawerController关闭键盘

时间:2015-01-05 06:58:27

标签: ios keyboard

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

我试过

  1. [self.view endEditing:YES]的{​​{1}}方法中写sideMenuViewController

  2. {li>

    viewWillAppear addObservercenterViewController的{​​{1}}方法中调用了[self.view endEditing:YES]postObserver

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

    enter image description here

    任何人都有想法解决它?

4 个答案:

答案 0 :(得分:3)

今天我遇到了同样的问题:)

我花了几个小时调试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用以下代码替换案例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:是要走的路。

希望能帮到你!

答案 1 :(得分:2)

我找到了解决方案

在CentralView控制器中

#pragma mark - Button Handlers
-(void)leftDrawerButtonPress:(id)sender{
    [self.mm_drawerController toggleDrawerSide:MMDrawerSideLeft animated:YES completion:nil];
    [self.textfield resignFirstResponder];
} 

试试这个方法。这对我有用

答案 2 :(得分:1)

你没有使用观察者,只要你的UITextField的IBOutlet属性说“textfield”。

[self.textfield resignFirstResponder];

在sideMenuViewController的viewWillAppear。

中添加此行

答案 3 :(得分:0)

对于仍然无法使用手势打开抽屉的人,请使用以下代码:

将代码放在初始化抽屉控制器的位置。

[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];
            }
        }];