在iOS中无法隐藏键盘

时间:2011-07-06 13:28:28

标签: objective-c ios cocoa-touch

我的应用有一个导航控制器。我的所有控制器都弹出并推送。一个控制器有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];

问题是,当我开始编辑这两个字段并且键盘处于活动状态时,我们使用键盘转到datepicker控制器并隐藏了我的日期选择器。我知道这个问题可以解决,但我不知道如何。请帮我。

2 个答案:

答案 0 :(得分:13)

这将要求每个视图辞职第一响应者。

[self.view endEditing:YES];

因为这将要求每个视图辞职第一响应者所有其他呼叫辞职第一响应者是多余的。它们应该被删除,以减少不正确地调用某些内容或将其调出或变成

的风险
[self.remedyName becomeFirstResponder];

您可以在Apple Docs

中详细了解相关信息

答案 1 :(得分: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]];