ResignFirstResponder не увольняет клавиатуру (iPhone) - PullRequest
6 голосов
/ 27 июля 2010

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

Я создал UIAlertView, чтобы предложить пользователю ввести свое имя в приложении для iPhone.

    UIAlertView *enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name"
                                                             message:@"\n\n\n"
                                                            delegate:self
                                                   cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
                                                   otherButtonTitles:NSLocalizedString(@"OK", nil),nil];

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)];
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert;
    enterNameField.borderStyle = UITextBorderStyleRoundedRect;
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo;
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing;
    enterNameField.returnKeyType = UIReturnKeyDone;
    enterNameField.delegate = self;
    [enterNameField becomeFirstResponder];
    [enterNameAlert addSubview:enterNameField];

    [enterNameAlert show];
    [enterNameAlert release];
    [enterNameField release];

Я настроил этот viewController для соответствия UITextFieldDelegate взаголовочный файл и реализовано textFieldShouldReturn: попытка отклонить клавиатуру, когда пользователь нажал кнопку «Готово».

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if ([textField isFirstResponder]) {
        [textField resignFirstResponder];
        NSLog(@"text field was first responder");
    } else {
        [textField becomeFirstResponder];
        [textField resignFirstResponder];
        NSLog(@"text field was not first responder");
    }
    NSLog(@"textfieldshouldreturn");
    return YES;
}

В отладчике я подтверждаю, что этот метод успешно вызывается, когда я нажимаю на кнопку «Готово» с textFieldбыть первым ответчиком в то время.Тем не менее, клавиатура не исчезает, а маленькая кнопка Clear исчезает.Ясно, что textField больше не является первым респондентом, потому что когда я снова нажимаю кнопку «Готово», ничего не вызывается.Я просто хочу отклонить клавиатуру кнопкой Готово.Может кто-нибудь предложить решение?Миллион благодарностей.

Ответы [ 6 ]

6 голосов
/ 24 ноября 2010

Сначала вам нужно определить ваш enterNameAlert в заголовке интерфейса. затем используйте приведенный ниже код.

- (void)viewDidLoad {    
    [super viewDidLoad];
    enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name"
                                                             message:@"\n\n\n"
                                                            delegate:self
                                                   cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
                                                   otherButtonTitles:NSLocalizedString(@"OK", nil),nil];

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)];
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert;
    enterNameField.borderStyle = UITextBorderStyleRoundedRect;
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo;
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing;
    enterNameField.returnKeyType = UIReturnKeyDone;
    enterNameField.delegate = self;    
    [enterNameAlert addSubview:enterNameField];
    [enterNameField becomeFirstResponder];
    [enterNameAlert show];    
    [enterNameField release];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if ([textField isFirstResponder]) {
        [textField resignFirstResponder];
        [enterNameAlert dismissWithClickedButtonIndex:1 animated:YES];
        [enterNameAlert release];
        NSLog(@"text field was first responder");
    } else {
        [textField becomeFirstResponder];
        [textField resignFirstResponder];
        NSLog(@"text field was not first responder");
    }
    NSLog(@"textfieldshouldreturn");
    return YES;
}
0 голосов
/ 11 апреля 2013

если у кого-то возникли проблемы с раскадровкой, мне нужно было перейти в свойства своего uitextfields и перетащить ctrl + из его делегата в корневой контроллер представления в раскадровке, и это все исправило ..

0 голосов
/ 27 января 2012

просто сделай

[mytextField addTarget:self 
            action:@selector(methodToFire:)
            forControlEvents:UIControlEventEditingDidEndOnExit];
0 голосов
/ 14 октября 2010

Сделайте так, чтобы другой объект стал, а затем немедленно подайте в отставку первого респондента.

0 голосов
/ 12 октября 2010

Попробуйте отключить клавиатуру с помощью resignFirstResponder для события «DidEndOnExit» вашего TextField.

Затем попробуйте закрыть клавиатуру, нажав кнопку «Готово» на клавиатуре, когда вы закончили ввод данных в текстовое поле.

Надеюсь, это поможет.

0 голосов
/ 08 октября 2010

Что произойдет, если вы переместите освобождение текстового поля в метод делегата после вызова метода resignFirstResponder?

...