Nel controllo UISearchBar, è il modo per modificare il titolo del tasto Search per la tastiera su Fatto?Cambia UISearchBar/Keyboard Search Button Titolo
risposta
Per una barra di ricerca di nome tablesearchbar:
// Set the return key and keyboard appearance of the search bar
for (UIView *searchBarSubview in [tableSearchBar subviews]) {
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
[(UITextField *)searchBarSubview setReturnKeyType:UIReturnKeyDone];
[(UITextField *)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
}
@catch (NSException * e) {
// ignore exception
}
}
}
Dal momento che le tastiere in stile Alert sono semi-trasparenti, posso vedere mio punto di vista dietro di esso. Non sembra molto bello dato che ho molti elementi dietro la tastiera che rendono difficile la distinzione dei tasti. Volevo una tastiera completamente nera.
Così ho animato un UIImageView nero in posizione dietro la tastiera quando si modifica il testo. Questo dà l'aspetto di una tastiera completamente nera.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
blackBoxForKeyboard.frame = CGRectMake(0, 377, 320, 216);
[UIView commitAnimations];
}
più Un suggerimento utile, al Run Loop codice (in "@try") sezione.
Ciò ha permesso il pulsante "Done" quando il campo di testo è vuoto:
UITextField *tf = (UITextField *)searchBarSubview;
tf.enablesReturnKeyAutomatically = NO;
Grazie! Funziona anche con la soluzione di Gregory per iOS7. – jbandi
Come è un protocollo con metodi opzionali, è necessario verificare ogni metodo separatamente invece di cercare l'attenzione.
for (UIView *searchBarSubview in searchBar.subviews)
{
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)])
{
// keyboard appearance
if ([searchBarSubview respondsToSelector:@selector(setKeyboardAppearance:)])
[(id<UITextInputTraits>)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
// return key
if ([searchBarSubview respondsToSelector:@selector(setReturnKeyType:)])
[(id<UITextInputTraits>)searchBarSubview setReturnKeyType:UIReturnKeyDone];
// return key disabled when empty text
if ([searchBarSubview respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)])
[(id<UITextInputTraits>)searchBarSubview setEnablesReturnKeyAutomatically:NO];
// breaking the loop when we are done
break;
}
}
Questo funziona per iOS < = 6. Per iOS> = 7, è necessario loop in searchBar.subviews[0].subviews
.
Come di iOS 7 beta 5, la risposta di Run Loop non ha funzionato per me, ma questo ha fatto:
for(UIView *subView in [searchBar subviews]) {
if([subView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subView setReturnKeyType: UIReturnKeyDone];
} else {
for(UIView *subSubView in [subView subviews]) {
if([subSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subSubView setReturnKeyType: UIReturnKeyDone];
}
}
}
}
Nel caso in cui non sia chiaro, il motivo se/else viene utilizzato è il if per iOS 6 compatibilità con le versioni precedenti e il resto è per iOS 7. –
risposta fantastica. questo funziona su iOS 7. grazie – Katushai
Funziona su iOS8 –
ho provato tutte le soluzioni illustrate qui, e nessuno di loro ha lavorato per la mia UISearchBar (xcode5 compilazione per iOS7). Ho finito con questa funzione ricorsiva che ha funzionato per me:
- (void)fixSearchBarKeyboard:(UIView*)searchBarOrSubView {
if([searchBarOrSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
if ([searchBarOrSubView respondsToSelector:@selector(setKeyboardAppearance:)])
[(id<UITextInputTraits>)searchBarOrSubView setKeyboardAppearance:UIKeyboardAppearanceAlert];
if ([searchBarOrSubView respondsToSelector:@selector(setReturnKeyType:)])
[(id<UITextInputTraits>)searchBarOrSubView setReturnKeyType:UIReturnKeyDone];
if ([searchBarOrSubView respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)])
[(id<UITextInputTraits>)searchBarOrSubView setEnablesReturnKeyAutomatically:NO];
}
for(UIView *subView in [searchBarOrSubView subviews]) {
[self fixSearchBarKeyboard:subView];
}
}
Poi ho chiamato in questo modo:
_searchBar = [[UISearchBar alloc] init];
[self fixSearchBarKeyboard:_searchBar];
Con Xcode 5 + iOS7, l'immissione di testo sarà in una sottoview anziché in una sottoview. Quindi in pratica hai usato la mia soluzione Xcode 4 e ho aggiunto una chiamata ricorsiva. Per le migliori prestazioni, puoi provare per la versione iOS e, se si tratta di iOS7, puoi navigare attraverso 'sottoview [0] .subviews' invece di' subviews'. –
Almeno per iOS 8, semplicemente:
[self.searchBar setReturnKeyType:UIReturnKeyDone];
Solo per che copre tutte le versioni iOS:
NSArray *subviews = [[[UIDevice currentDevice] systemVersion] floatValue] < 7 ? _searchBar.subviews : _searchBar.subviews[0].subviews;
for (UIView *subview in subviews)
{
if ([subview conformsToProtocol:@protocol(UITextInputTraits)])
{
UITextField *textField = (UITextField *)subview;
[textField setKeyboardAppearance: UIKeyboardAppearanceAlert];
textField.returnKeyType = UIReturnKeyDone;
break;
}
}
Per Swift per cambiare tasto di ritorno di UISearchBar
searchBar.returnKeyType = UIReturnKeyType.Done
enum disponibili sono le seguenti
public enum UIReturnKeyType : Int {
case Default
case Go
case Google
case Join
case Next
case Route
case Search
case Send
case Yahoo
case Done
case EmergencyCall
@available(iOS 9.0, *)
case Continue
}
Solo un promemoria! Se searchBar rimane come primo risponditore, dopo aver modificato returnKeyType, devi chiudere la tastiera e farlo scattare di nuovo per vedere le modifiche.
search.resignFirstResponder()
searchBar.returnKeyType = UIReturnKeyType.Done
search.becomeFirstResponder()
Qui ho spiegato http://stackoverflow.com/a/26712861/2981840 – Chidhambaram