2010-12-03 6 views
0

Dans ma vue j'ai 3 UITextField, pour chacun d'eux, j'ai créé un accessoireView pour le clavier comme expliqué par apple.ResignFirstResponder de Keyboard AccessoryView Button

Dans mon accessoireView j'ai ajouté un bouton qui doit appeler la fonction "CloseKeyboard". Dans cette fonction je ne peux pas trouver un moyen d'intercepter le UITextField dans lequel le clavier écrit et sur lequel j'ai besoin d'appeler ResignFristResponder.

Pour ajouter accessoryView sur un champ i écrit que le code

if (field1.inputAccessoryView == nil) { 
    field1.inputAccessoryView = [self createInputAccessoryView]; 
} 
if (field2.inputAccessoryView == nil) { 
    field2.inputAccessoryView = [self createInputAccessoryView]; 
} 
if (field3.inputAccessoryView == nil) { 
    field3.inputAccessoryView = [self createInputAccessoryView]; 
} 

Et ici la fonction createInputAccessory:

-(UIView *)createInputAccessoryView { 

    CGRect accessFrame = CGRectMake(0.0, 0.0, 20.0, 55.0); 

    UIView *inputAccessoryView = [[UIView alloc] initWithFrame:accessFrame]; 

    UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    compButton.frame = CGRectMake(250.0, 10.0, 60.0, 40.0); 

    [compButton setTitle: @"Close" forState:UIControlStateNormal]; 

    [compButton addTarget:self action:@selector(CloseKeyboard:) 

         forControlEvents:UIControlEventTouchUpInside]; 

    [inputAccessoryView addSubview:compButton]; 

return inputAccessoryView; } 

Comment puis-je mettre en œuvre la fonction "CloseKeyboard" pour être en mesure de resignFirstResponder de UITextField actif ?

Nous vous remercions de votre aide!

Répondre

1

Comme d'iOS 2.0 et versions ultérieures, il existe un moyen facile de rejeter le clavier sans avoir à suivre le contrôle actuellement actif, ou itérer à travers tous les contrôles disponibles, ou en utilisant un UITextFieldDelegate.

[self.view endEditing:YES] 

De la documentation:

endEditing:

Causes de la vue (ou l'un de ses champs de texte intégré) à résignent le premier état de répondeur.

- (BOOL) endEditing :(BOOL) vigueur

Paramètres
vigueur
pour forcer YES Spécifiez le premier intervenant à démissionner, indépendamment du fait qu'il veut faire ainsi.

Valeur de retour
YES si la vue démissionna le premier état de répondeur ou NO si elle ne l'a pas.

Discussion
Cette méthode ressemble à la vue actuelle et sa hiérarchie pour le sous-vue champ de texte qui est actuellement le premier intervenant. Si en trouve un, il demande à ce champ de texte de démissionner en tant que premier répondeur. Si le paramètre force est défini sur YES, le champ de texte n'est jamais demandé; il est forcé de démissionner.

0

Comme première solution j'essaye avec cette implémentation, où je force chaque fois field1 devenir firstResponder et que je le résigne.

-(void) closeFunction:(id)sender{ 
    [field1 becomeFirstResponder]; 
    [field1 resignFirstResponder]; 
} 

Mais c'est un travail autour ... pas une solution: P