Выбор UIAlertView, приводящий к сбою resignFirstResponder - PullRequest
1 голос
/ 13 января 2011

У меня проблема, похожая на вопрос Энтони Чана , и после попытки каждого предложенного решения я все еще застрял.

Почему-то, только после взаимодействия с моим UIAlertView, яЯ не могу отклонить клавиатуру в другом представлении моего приложения.Как будто Alert нарушает способность моего UITextField к resignFirstResponder.Ниже я создаю экземпляр своего UIAlertView, который затем вызывает его метод didDismissWIthButtonIndex.Затем я вызываю метод showInfo, который загружает другой UIViewController.

UIAlertView *emailFailAlert = [[UIAlertView alloc] initWithTitle:@"Error"
                            message:@"error message text."
                           delegate:self
                  cancelButtonTitle:@"Not now"
                  otherButtonTitles:@"Settings", nil];
[emailFailAlert setTag:2];
[emailFailAlert show];
[emailFailAlert release];

Когда нажата опция «Настройки», я вызываю этот метод:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {   
    if ([alertView tag] == 2) {    
        if (buttonIndex == 1){      
            [self showInfo:nil];
        }
    }   
}

Мой метод showInfo загружает другой ViewController с помощью кода ниже:

- (IBAction)showInfo:(id)sender {
    FlipsideViewController *fscontroller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    fscontroller.delegate = self;
    fscontroller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:fscontroller animated:YES];
    [fscontroller release];
}

После нажатия любого текстового поля в этом Flipside VC я не могу отклонить клавиатуру, как обычно, с помощью - (BOOL)textFieldShouldReturn:(UITextField *)textField и [textField resignFirstResponder].Я пропустил этот код, потому что этот вопрос становится длинным, но я рад опубликовать его в случае необходимости.

Интересная часть заключается в том, что если я закомментирую вызов [self showInfo:nil], сделанный при нажатии кнопки, ивызовите его, нажав кнопку тестирования (за пределами alertView didDismissWithButtonIndex: метод), все работает нормально.Есть идеи, что здесь происходит?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Когда предупреждение, с более чем одной опцией отмены , вызывается над клавиатурой - клавиатура становится недействительной, если в активном текстовом поле присутствует resignFirstResponder;

Вам нужно будет закрыть клавиатуру, прежде чем показывать предупреждение.

Предполагается, что ваш UITextField называется myTextField ;

[myTextField resignFirstResponder]; //That's the only line I added

UIAlertView *emailFailAlert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                         message:@"error message text."
                                                        delegate:self
                                               cancelButtonTitle:@"Not now"
                                               otherButtonTitles:@"Settings", nil];
[emailFailAlert setTag:2];
[emailFailAlert show];
[emailFailAlert release];

Надеюсь, это поможетлюбой, кто имел дело с этой странно неясной проблемой.

0 голосов
/ 14 января 2011

Вы не должны звонить alertView:didDismissWithButtonIndex: напрямую.Этот метод делегата будет выполняться автоматически во всех случаях после исчезновения предупреждения.В противном случае код будет выполнен дважды!

...