Не могу спрятать клавиатуру в iOS - PullRequest
5 голосов
/ 06 июля 2011

Мое приложение имеет контроллер навигации. Все мои контроллеры поп и пуш. Один контроллер имеет 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 с клавиатурой, и он скрывает мой DatePicker. Я знаю, что эту проблему можно решить, но я не знаю как. Пожалуйста, помогите мне.

Ответы [ 2 ]

13 голосов
/ 06 июля 2011

Это попросит каждый вид отставки первого респондента.

[self.view endEditing:YES];

Поскольку при этом каждое представление будет запрашивать отставку первого респондента, все остальные вызовы отставки первого респондента являются избыточными.Они должны быть удалены, чтобы снизить риск неправильного или неправильного вызова чего-либо, например

[self.remedyName becomeFirstResponder];

Подробнее об этом можно прочитать в Apple Docs

0 голосов
/ 06 июля 2011

Может быть эта строка вызывает проблему:

[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]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...