2010-05-20 6 views
0

J'écris pour iphone OS 3.1.3. Je veux que le bouton de recherche sur le clavier de mon UISearchBar ait le bouton de recherche activé tout le temps. S'il s'agissait d'un ancien UITextField (pas une barre de recherche), la propriété serait enableReturnKeyAutomatically.paramètre enableReturnKeyAutomatically sur UISearchBar

J'ai essayé de placer cela en utilisant l'exemple donné à http://discussions.apple.com/thread.jspa?messageID=8457910

qui suggère:

UITextField *searchTextField ; 
searchTextField = [[searchBar subviews]objectAtIndex:0]; 
searchTextField.enablesReturnKeyAutomatically = NO ; 

devrait fonctionner.

malheureusement, il se bloque:

2010-05-20 08:36:18.284 ARemote[5929:207] *** -[UISearchBarBackground setEnablesReturnKeyAutomatically:]: unrecognized selector sent to instance 0x3b31980 
2010-05-20 08:36:18.284 ARemote[5929:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UISearchBarBackground setEnablesReturnKeyAutomatically:]: unrecognized selector sent to instance 0x3b31980' 

J'ai aussi essayé

((UITextField *)[(NSArray *)[searchBar subviews] objectAtIndex:0]).enablesReturnKeyAutomatically = NO;</code> 

Ce qui donne des résultats similaires.

Des idées?

Vive Erik

Répondre

7

Vous accédez une vue documentée hiérarchie des UISearchBar. Cela peut entraîner un rejet, mais le comportement de votre application ne sera pas spécifié lors de la mise à niveau du micrologiciel.

Ceci est un exemple. Lorsque cette réponse a été postée, UITextField était toujours la première sous-vue de la barre de recherche. Maintenant, la première sous-vue devient UISearchBarBackground. La modification minimale consiste à parcourir toute la hiérarchie de vue et à trouver le UITextField réel.

for (id subview in searchBar.subviews) { 
    if ([subview respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)]) { 
     [subview setEnablesReturnKeyAutomatically:NO]; 
     break; 
    } 
} 

Mais pour la compatibilité avant, il est préférable d'utiliser un UITextField au lieu d'un UISearchBar, ou de ne pas exiger le bouton de recherche être activé tout le temps (par exemple, utilisez le bouton Annuler).

1

En fait, vous pouvez simplement définir searchBar.enablesReturnKeyAutomatically = NO;