无法在iOS中隐藏键盘

5

我的应用程序有一个导航控制器,所有的控制器都可以进行弹出和推入。其中一个控制器有12个文本字段。2个文本字段会调用其他控制器。这是一个UIDatePicker,并且通过委托方法将当前日期设置在这两个字段中。

  - (IBAction) beginEditingDateStart:(id) sender{
[sender resignFirstResponder];

[self.remedyName becomeFirstResponder];
[self.remedyName resignFirstResponder];
[self.doseName resignFirstResponder];
[self.count resignFirstResponder];
[self.dateFrom resignFirstResponder];
[self.dateTill resignFirstResponder];
[self.doseAmount resignFirstResponder];

[self.view endEditing:NO];
[self.view resignFirstResponder];
    DatePickerViewController *dateView = [[DatePickerViewController alloc] initWithNibNameAndKey:@"DatePickerViewController" bundle:[NSBundle mainBundle] key:@"from"];
dateView.delegate = self;
[self.navigationController pushViewController:dateView animated:YES];
[dateView release];

问题在于当我开始编辑这两个字段并且键盘处于激活状态时,我们会进入日期选择器控制器并隐藏我的日期选择器。我知道这个问题可以解决,但我不知道怎么做。请帮助我。
2个回答

12
这将要求每个视图放弃第一响应者。
[self.view endEditing:YES];

由于这将要求每个视图先放弃第一个响应者,所有其他的放弃第一个响应者的调用都是多余的。它们应该被移除,并且为了减少调用错误或不按顺序的风险,比如

[self.remedyName becomeFirstResponder];

你可以在苹果文档中了解更多相关信息。


参数 YES 是为了强制视图先放弃第一响应者身份。你使用了 NO,所以可能有一个视图没有准备好放手。 - Paul.s
我还在self.view上方有一个uiscrollview。如果有帮助的话。 - Oleg
你是否正在使用UIViewController的子类?self.view应该是根视图。 - Paul.s
我认为我正在使用UIViewController的子类。 - Oleg
你的方法是在什么时候被调用的?用户是否点击了一个按钮?你能插入一个断点来确保代码被执行到了吗? - Paul.s
我可以添加它的行为方式。当键盘处于活动状态时,不会发生任何事情。但是如果在没有键盘的情况下触摸该字段,则键盘不会出现。代码运行正确。 - Oleg

0

可能是这一行引起了问题:

[self.remedyName becomeFirstResponder];

否则,您可以这样做以确保所有视图都已经辞去第一响应者:
- (void)resignFirstResponderForSubviewsOfView:(UIView *)aView {

    for (UIView *subview in [aView subviews]) {

        if ([subview isKindOfClass:[UITextField class]] || [subview isKindOfClass:[UITextView class]])
            [(id)subview resignFirstResponder];

        [self resignFirstResponderForSubviewsOfView:subview];
    }
}

然后从视图控制器中这样调用它:

[self resignFirstResponderForSubviewsOfView:[self view]];

谢谢您的回复。我检查了您的代码,但键盘没有消失。我尝试了所有方法并查看了很多主题,但都没有帮助。 - Oleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接