Clavier apparaît après UIAlertView est rejeté sur iOS 8.3 pour iPad

Avec le dernier iOS 8.3 sortie, notre application commence à avoir un comportement bizarre.

Après la fin de textfield d'édition, l'utilisateur peut cliquer sur le bouton de fermeture qui amène une UIAlertView. Lorsque l'utilisateur clique sur jeter dans le alertview, alertview et affichage en cours sont rejetées. Mais de toute façon, le clavier s'affiche après le point de vue est allé qui est assez ennuyeux pour les utilisateurs.

Après un peu de débogage, il semble que le clavier est affiché pour la dernière textfield que l'utilisateur a accédé avant la fermeture de la vue. J'ai essayé plusieurs façons de endEditing pour la vue en cours dans de nombreux endroits (avant de montrer UIAlertView, après avoir cliqué sur un bouton dans la UIAlertView; j'ai même mis le focus à un autre élément de l'INTERFACE utilisateur de la vue). Elle ne résout pas le problème.

Mais pour ce problème particulier, je ne suis pas sûr si c'est un problème commun ou quelque chose que nous devons corriger. Tout fonctionne parfaitement avant d'iOS 8.3.

Nous comprenons que UIAlertView est déconseillé pour iOS 8. Nous avons commencé à migrer vers UIAlertController. Mais s'il existe une solution de contournement, nous aimerions entendre parler.

Voici un extrait de code.

- (IBAction)closeTapped:(UIButton *)sender
{
    //try to resign first responder
    //[self.tfName resignFirstResponder];
    //[self.tfPosition resignFirstResponder];
    [self.view endEditing:YES];

    if(self.orderDetails.isOpen && self.orderItemChanged)
    {
        UIAlertView* saveAlert = [[UIAlertView alloc] initWithTitle:@"Unsaved Changes"
                                                            message:@"Your changes have not been saved. Discard changes?"
                                                           delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Save", @"Discard", nil];
        [saveAlert show];
    }
    else
    {
        [self close];
    }
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    switch(buttonIndex)
    {
        case 1: //Save
        {
            [self save];
            break;
        }
        case 2: //Discard
        {
            [self close];
            break;
        }
    }
}

- (void)close
{   
    [self.delegate dismissEditOrderItemVC];
}
  • Avez-vous essayer d'appeler resignFirstResponder sur le champ de texte avant de montrer l'affichage des alertes?
  • Oui, je n'ai resignFirstResponder pour tous les objets textfield et endEditing pour l'affichage en cours. Ne semble pas fonctionner 🙁
  • Vous pourriez avoir à nous montrer le code pour être en mesure d'aider les autres. Il semble que le licenciement d'alerte vue est le déclenchement de certains du cycle de vie des appels sur votre vue-contrôleur.
  • J'ai ajouté un extrait de code pour post original. Merci.
  • Faites-vous quelque chose dans viewWillAppear / viewDidAppear?
  • Rien. Seulement dans le viewDidLoad pour configurer l'affichage de la structure.
  • double possible de Clavier perd cacher capacité "si j'utilise un UIAlertView"

InformationsquelleAutor Helen | 2015-05-08