我正在使用MMDrawerController作为侧边菜单。当我打开侧面菜单时,我找不到在中心视图中关闭键盘的位置。
我试过
在[self.view endEditing:YES]
的{{1}}方法中写sideMenuViewController
。
viewWillAppear
addObserver
在centerViewController
的{{1}}方法中调用了[self.view endEditing:YES]
和postObserver
。
它只是不起作用并导致这样......
任何人都有想法解决它?
答案 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];
}
}];