2011-05-04 2 views
0

J'ai un UITextField dans une vue Paysage, et lorsque j'appuie sur le bouton "Quitter le clavier" en bas à droite de la vue UIKeyboard, le clavier ne disparaît PAS. Existe-t-il un moyen d'écouter par programmation lorsque cette touche a été pressée? Ou y a-t-il un lien que je ne vois pas qui fera disparaître ce clavier? Ceci est iOS 4 et XCode 4. Merci.Le bouton "Annuler le clavier" de l'iPad ne rejette pas le clavier

Répondre

2

J'ai eu le même problème aujourd'hui et je me demandais, wy il fonctionne dans le code d'échantillon KeyboardAccessory d'Apple. J'ai donc fait du reverse engineering. Le ViewController n'était pas l'erreur que j'ai faite dans mon cas.

Dans l'implémentation de UIApplicationDelegate, il y a le point d'entrée de l'application, où le viewcontroller racine et la fenêtre seront configurés - (void) applicationDidFinishLaunching:(UIApplication *)application. Si vous avez oublié d'ajouter la vue rootcontrollers à la fenêtre en tant que sous-vue, le bouton de suppression du clavier ne fonctionnerait pas dans les vues de votre application.

@class ViewController; 

@interface KeyboardAccessoryAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    ViewController *viewController; 
} 

    @property (nonatomic, retain) IBOutlet UIWindow *window; 
    @property (nonatomic, retain) IBOutlet ViewController *viewController; 

@end 

...

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 
} 

S'il vous plaît ne pas oublier de configurer les points de vente dans le fichier principal xib.

Je ne sais pas pourquoi cela est lié au comportement des claviers. Mais ma théorie est, que la chaîne répondeur n'est pas liée à la fenêtre, mais il a besoin.

0

Vous devez indiquer au champ de texte acceptant l'entrée au clavier de ne plus être le premier répondeur.

[UITextField resignFirstRepsonder]; 
+0

Oui - ce n'est pas un problème. Le clavier disparaît lorsque ce message est envoyé. Le problème est que rien ne se passe lorsque le bouton 'Rejeter le clavier' en bas à droite du clavier de l'iPad (qui ressemble à une petite icône du clavier) est enfoncé. Et le champ de texte ne reçoit aucune entrée de cette clé. Je me demande vraiment si j'ai rencontré un bug à ce stade. Merci quand même. –

0

Pour masquer le clavier en utilisant le si vous voulez rejeter le clavier en appuyant sur l'extérieur de celui-ci, rejeter le bouton du clavier vous devez implémenter la méthode déléguée

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    //Check if your text field is first responder, and if it is, have it resign 
} 

Vous pouvez également utiliser

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UIView* view in self.view.subviews) 
    { 
     if ([view isKindOfClass:[UITextField class]]) { 
      [view resignFirstResponder]; 
     } 

     if ([view isKindOfClass:[UITextView class]]) { 
      [view resignFirstResponder]; 
     } 
    } 
} 
+0

Merci @capt kettch - Je l'ai déjà dans mon code ... voici un extrait ... J'ai la classe configurée en tant que délégué pour UITextField: '@interface SettingsController: UIViewController {... 'puis dans la méthode que vous mentionnez je vérifie avec:' - (BOOL) textFieldShouldReturn: (UITextField *) textField { si ([textField isFirstResponder]) { [textField resignFirstResponder]; } 'so - Je pense que les choses sont correctement connectées - tout semble manquer? Merci encore! –

+0

J'ai oublié de mentionner, vous devez vous assurer que votre champ de texte a son jeu de délégué au contrôleur de vue (le plus probable de soi) –

Questions connexes