2010-10-12 17 views
0

Normalement, nous utilisons le resignFirstResponder pour cacher le clavier dans les applications iPhone. Par exemple, lorsque l'on utilise un UISearchBar, après que l'utilisateur cliquez sur le bouton de recherche, nous cachons le clavier en œuvre la fonction searchBarSearchButtonClicked comme ceci:Que signifie exactement un répondeur?

-(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{ 
     NSLog(@"Search Button Click, result should be show here"); 
     [searchBar setShowsCancelButton:NO animated:YES]; 
     [searchBar resignFirstResponder];  
     self.dictTableView.allowsSelection = YES; 
     self.dictTableView.scrollEnabled = YES;  
} 

Nous avons mis la barre de recherche comme le premier intervenant, le clavier être caché après que l'utilisateur clique sur le bouton de recherche.

Pourquoi ça marche comme ça? Nous n'avons appelé aucune fonction qui cache le clavier, nous avons juste défini searchBar comme le premier répondeur, pourquoi le système cache-t-il le clavier automatiquement?

Quelqu'un pourrait-il expliquer le mécanisme de ce processus?

Merci beaucoup!

Répondre

4

Objective-C fonctionne en envoyant des messages aux objets sous la forme de sélecteurs qui sont des noms de méthodes appartenant à l'objet ciblé. Un "responder" est un objet qui répondra à un message envoyé par un événement de l'interface utilisateur.

Les répondeurs vivent dans une hiérarchie appelée chaîne répondeur. Si un répondeur ne peut pas comprendre un message d'interface utilisateur, il le transmet au prochain répondant de la chaîne, jusqu'à l'objet d'application lui-même.

Dans le cas d'un champ de texte, en tapant sur le champ, le champ devient le premier répondeur de sorte qu'il intercepte tous les événements d'interface utilisateur ultérieurs. Un champ de texte interrompt les événements de l'interface utilisateur avec le clavier afin qu'il évoque automatiquement le clavier. Un champ de texte ne s'intéresse à aucune entrée non associée au clavier, donc lorsqu'il démissionne en tant que premier répondeur, il écarte le clavier.

C'est la beauté d'une API orientée objet. Vous n'avez pas besoin de microgérer les comportements standard. Les objets eux-mêmes le manipulent pour vous. Si vous avez l'habitude de travailler avec une API plus procédurale, cela pourrait être un peu désorientant.

(En passant, c'est un vieux chapeau de nos jours, mais il était fan-fricken-tastic au début des années 90, quand Objective-C et NextStep étaient des technologies révolutionnaires.Tim Burners-Lee a inventé le navigateur web juste aurait une excuse pour acheter un prochain cube.)

+0

+1 Documentation de la chaîne répondeur: http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/CocoaFundamentals/CoreAppArchitecture/CoreAppArchitecture.html#//apple_ref/doc/uid/TP40002974-CH8-SW17 –

+0

Remerciements vous beaucoup pour votre explication! Ça aide beaucoup! Maintenant, je peux mieux comprendre le «répondeur». –

0

Le "premier répondeur" est l'objet de l'interface utilisateur qui accepte actuellement les événements (clavier ou événements tactiles). Les objets qui attendent une entrée au clavier (comme une barre de recherche) feront apparaître le clavier lorsqu'ils deviendront les premiers répondants.

Lorsque vous dites à la barre de recherche d'arrêter d'être "premier répondeur" ([searchBar resignFirstResponder]), le clavier n'est plus nécessaire et s'en va.

+0

Cool. Ce que vous dites, c'est que lorsque la barre de recherche devient le premier répondeur, la barre de recherche appelle automatiquement la fonction de clavier d'affichage, et lorsque la barre de recherche est désactivée, elle appelle automatiquement la fonction de clavier caché. Est-ce correct? Donc, disons que j'ai un autre objet qui est un bouton, si je mets ce bouton en tant que premier répondeur, le clavier sera également caché, non? –