Отключите клавиатуру, если всплывет окно действий. - PullRequest
3 голосов
/ 23 июля 2011

У меня есть UIDatePickerView внутри UIActionSheet в качестве входных данных для UITextField.При фокусировке на UITextField вместо клавиатуры появится всплывающее окно UIActionSheet.При нажатии на кнопку «Готово» в UIActionSheet он будет скрыт.У меня есть несколько других текстовых полей, которые ведут себя как обычно (показывает клавиатуру).

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if ([textField isEqual:txtExpDate]) {
        [textField resignFirstResponder];
        [self showDatePicker];
    }
}


- (void) showDatePicker{
    UIActionSheet *datePickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Done" otherButtonTitles:nil];
    datePickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 80, 0, 0)];
    datePickerView.datePickerMode = UIDatePickerModeDate;
   [datePickerActionSheet addSubview:datePickerView];
   [datePickerActionSheet showInView:self.navigationController.view];
   [datePickerActionSheet setBounds:CGRectMake(0, 0, 320, 500)];
   [datePickerActionSheet release];

}

Теперь моя проблема, допустим, первый пользователь нажимает на обычное текстовое поле.Который будет выскакивать клавиатура.Затем, не нажимая кнопку «Готово», он нажимает на поле даты.Который будет всплывающим листом действий (без увольнения клавиатуры).После скрытия листа действий пользователь должен нажать на другой текстовый файл и нажать клавишу возврата на клавиатуре.

Я хочу скрыть клавиатуру, если лист действий появится во всплывающем окне?

Ответы [ 6 ]

7 голосов
/ 23 июля 2011

Сделайте текстовое поле resignFirstResponder , когда вы собираетесь вызвать лист действий.Если у вас более одного текстового поля, создайте переменную экземпляра типа UITextField в .h файле.

UITextField *currentTextField;

Затем вы можете сохранить ссылку на текущее текстовое поле в textFieldDidBeginEditing: метод.

- (void)textFieldDidBeginEditing:(UITextField *)textField {

    currentTextField = textField;
    ....

И, вызов [currentTextField resignFirstResponder] в showDatePicker * метод 1016 *.

- (void)showDatePicker {

    [currentTextField resignFirstResponder];
    UIActionSheet *datePickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Done" otherButtonTitles:nil];
    ...

РЕДАКТИРОВАТЬ: @ Сэмюэль Гудвин правильно.Нам не нужно отслеживать текстовые поля.Мы можем просто сделать следующее, чтобы закрыть клавиатуру.

- (void)showDatePicker {

    [self.view endEditing:YES];
    ...
3 голосов
/ 24 июня 2013

Если вы хотите отказаться от клавиатуры по любой причине, просто выполните:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) target:nil forEvent:nil];

Работает для всех текстовых полей везде и везде.

0 голосов
/ 13 октября 2014

Работает нормально.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    if(textField==myTextField2){
        [myTextField1 resignFirstResponder];
        [self showActionSheet];
        return NO;
    }
    return YES;      
}
0 голосов
/ 19 августа 2013

Я знаю, что это очень старый пост, но я просто подумал, что добавлю решение, которое сработало для меня (остальные нет). Я обнаружил, что мне пришлось переназначить текстовое поле, чтобы оно сначала отвечало на запрос, а потом снова его оставляю. Неважно, какое текстовое поле становится, затем теряет статус первого респондента, это просто способ угробить эту клавиатуру.

[self.textfield becomeFirstResponder];
[self.textfield resignFirstResponder];
0 голосов
/ 04 августа 2012
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if ([textField isEqual:txtExpDate]) {

        [self showDatePicker];
        return NO;
    }
    return YES;

}
0 голосов
/ 25 ноября 2011

Метод, предложенный EmptyStack, не работал для меня (с использованием xcode 4.2).Я поместил сообщение [currentTextField resignFirstResponder] в методе willPresentActionSheet:(UIActionSheet *)actionSheet, который также не работал.Затем я поместил сообщение в actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex, и это сделало трюк ... странно!

...