Question

Je veux masquer le clavier UITextField Événement d'édition de fin, mais je ne peux pas faire fonctionner le code suivant! Lorsque j'appuie sur le bouton Terminé, il cache le clavier mais pas lorsque je n'appuye pas sur le bouton Done et passez à un autre UITextField où je n'ai pas besoin de clavier mais UIPickerView. Fondamentalement UIPickerView apparaît mais derrière le clavier. Je démissionne au courant UITextField En fin de compte, l'événement d'édition ainsi que le début de l'édition pour les champs de texte requis. Le code d'édition de début fonctionne bien si je n'ai pas de clavier déjà affiché pour la précédente UITextField. Quelqu'un pourrait-il me dire ce que je fais de mal?

La séquence suivante fonctionne:

  1. Sélectionnez Normal UITextField et insérer du texte, appuyez sur le bouton DID (ce clavier cache)
  2. Sélectionner UITextField (cela affiche la vue de sélecteur)

..mais ne suit pas:

  1. Sélectionnez Normal UITextField et insérer du texte
  2. Sélectionner UITextField (La vue de sélecteur est derrière le clavier car je n'ai pas appuyé sur le bouton Done pour précédent UITextField). Ici, il appelle l'édition finale, mais il ne masque pas le clavier!

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        [textField resignFirstResponder];
        scrollView.contentSize = CGSizeMake(320, 750);
        [scrollView setFrame:CGRectMake(0, 0, 320, 480)];
        return YES;
     }
    
    -(void)textFieldDidEndEditing:(UITextField *)textField  
    {
        [textField resignFirstResponder];
    }
    
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        DatePicker.hidden = YES;
        CountryPickerView.hidden = YES;
    
        switch (textField.tag) {
            case 3:
                [textField resignFirstResponder];
                DatePicker.hidden = NO;
                return;
            case 6:
                [textField resignFirstResponder];
                CountryPickerView.hidden = NO;
                return;
            default:
                break;
        }
        scrollView.contentSize = CGSizeMake(320, 650);
        [scrollView setFrame:CGRectMake(0, 0, 320, 260)];
    }
    
Était-ce utile?

La solution

Il cache le clavier mais pas lorsque je n'appuyez pas sur le bouton Done et passez à un autre UITEXTField où je n'ai pas besoin de clavier mais PickerView.

La bonne façon de gérer cela est de définir le inputView Propriété du champ qui utilise un sélecteur au lieu du clavier. Configurez le sélecteur tel que vous en avez besoin (configurez le délégué, la source de données, etc.), puis définissez-le comme le champ inputView. Le système gérera la cachette du clavier et affiche la vue de sélecteur, ou vice versa, lorsque vous passez d'un champ à l'autre.

Autres conseils

Vous ne devriez pas compter sur des étiquettes mais les pointeurs vers les objets et supprimer [textField resignFirstResponder]; de TextFielddidededing.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if (textField == theTextFieldIDontWantKeyboardFor) {  
        [thepreviousTextField resignFirstResponder]; 
        return NO;
    }
    return YES; 
}
[yourTextField resignFirstResponder];

Est ce qui cache réellement le clavier, alors utilisez-le lorsque le sélecteur est sur le point d'ouvrir.

Lorsque vous passez un contrôle d'un champ de texte à un suivant sans démission, textFieldDidBeginEditing Ne vous appelle pas ainsi, vous devez démissionner le TextField en le faisant "FiRSTresponder" (car il ne s'agit pas de FiRSTresponder en raison de la modification du champ de texte actif) puis d'appeler resignFirstResponder

Essayez ce code

 -(void)textFieldDidEndEditing:(UITextField *)textField  
  {
  if(textField==nameTextField){
    [nameTextField resignFirstResponder];

     //
  }
  else if(textField==pickerTextField){

  ///
  }
  }

  - (BOOL)textFieldShouldReturn:(UITextField *)textField {
  if(textField==nameTextField){
    [nameTextField resignFirstResponder];

    //
  }
  else if(textField==pickerTextField){

  ///
  }
  }

Ajouter ici mes derniers résultats!

Solution par Valexa. Cela a bien fonctionné, mais j'avais besoin de gérer manuellement différentes vues d'entrée.

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        [textField resignFirstResponder];
            scrollView.contentSize = CGSizeMake(320, 750);
            [scrollView setFrame:CGRectMake(0, 0, 320, 480)];
        return YES;
    }

    - (void)textFieldDidBeginEditing:(UITextField *)textField {    
           previousTextField = textField;
           scrollView.contentSize = CGSizeMake(320, 650);
           [scrollView setFrame:CGRectMake(0, 0, 320, 260)];
    }

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
           if (textField == CountryTextField || textField == BirthdayTextField) {
                  [previousTextField resignFirstResponder]; 
                  return NO; 
           }
          return YES; 
    }

Solution étonnante (merci Caleb): Pas besoin de surveiller une variable supplémentaire pour TextField précédent et pas besoin d'avoir des maux de tête d'afficher et d'ajouter des vues

BirthdayTextField.inputView = DatePickerView;
CountryTextField.inputView = CountryPickerView;
SexTextField.inputView = SexPickerView;

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
    scrollView.contentSize = CGSizeMake(320, 750);
    [scrollView setFrame:CGRectMake(0, 0, 320, 480)];
return YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    scrollView.contentSize = CGSizeMake(320, 650);
    [scrollView setFrame:CGRectMake(0, 0, 320, 260)];
}
-(void)hidekeybord
{
    [_txt_fname resignFirstResponder];
    [_txt_lname resignFirstResponder];
    [_txt_email resignFirstResponder];
    [_txt_phoneN resignFirstResponder];
    [_txt_dateofbd resignFirstResponder];
    [_txt_address resignFirstResponder];
    [_txt_city resignFirstResponder];

}

- (IBAction)btn_open_datepiker:(id)sender
{
    [self hidekeybord];

    _datepiker_bd.hidden=FALSE;
    _toolbar_db.hidden=FALSE;


}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top