wake-up-neo.net

Titel der UISearchBar/Tastatur-Suchschaltfläche ändern

Kann der Titel der Suchschlüssel für die Tastatur in UISearchBar-Steuerelement in Done geändert werden?

54
Jim B

Für eine Suchleiste mit dem Namen tabelle searchbar:

// 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
                }
            }
        }
97
RunLoop

Zumindest für iOS 8 einfach:

    [self.searchBar setReturnKeyType:UIReturnKeyDone];
48
pickwick

Bei iOS 7, Beta 5, funktionierte die Antwort von Run Loop nicht für mich. Dies tat jedoch Folgendes:

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];
            }
        }      
    }
}
43

Ein weiterer nützlicher Hinweis zum Abschnitt Run Loop code (in "@try").

Diese aktivierte Schaltfläche "Fertig", wenn das Textfeld leer ist:

UITextField *tf = (UITextField *)searchBarSubview;
tf.enablesReturnKeyAutomatically = NO;
18
theWalker

Damit Swift den Rückkehrschlüssel von UISearchBar ändern kann

searchBar.returnKeyType = UIReturnKeyType.done

enum verfügbar sind wie folgt

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
}
11
Hardik Thakkar

Nur eine Erinnerung! Wenn Sie searchBar als Ersthelfer verbleiben, müssen Sie nach dem Ändern Ihres returnKeyType Ihre Tastatur schließen und erneut öffnen, um die Änderungen zu sehen. 

search.resignFirstResponder()
searchBar.returnKeyType = UIReturnKeyType.Done
search.becomeFirstResponder()
2
Codingpan

Da es sich um ein Protokoll mit optionalen Methoden handelt, sollten Sie jede Methode separat testen, anstatt sie zu versuchen.

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;
    }
}

Dies funktioniert für iOS <= 6. Bei iOS> = 7 müssen Sie searchBar.subviews[0].subviews einschleifen.

1
Cœur

Nur für alle iOS-Versionen:

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;
    }
}
0
Zaraki

Da die Tastaturen im Alert-Stil halbtransparent sind, kann ich meine Ansicht dahinter sehen. Es sieht nicht sehr gut aus, da sich hinter der Tastatur mehrere Elemente befinden, die es schwer machen, die Tasten hervorzuheben. Ich wollte eine schwarze Tastatur.

Also animierte ich eine schwarze UIImageView hinter der Tastatur, wenn der Text bearbeitet wurde. Dies gibt den Eindruck einer vollständig schwarzen Tastatur.

- (void)textFieldDidBeginEditing:(UITextField *)textField {

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.25]; 

    blackBoxForKeyboard.frame = CGRectMake(0, 377, 320, 216);
    [UIView commitAnimations]; 

}
0
RyeMAC3

Ich habe alle hier gezeigten Lösungen ausprobiert, und keine davon funktionierte für meine UISearchBar (Xcode5-Kompilierung für iOS7). Ich endete mit dieser rekursiven Funktion, die für mich funktionierte:

- (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];
    }
}

Ich habe es dann so genannt:

_searchBar = [[UISearchBar alloc] init];
[self fixSearchBarKeyboard:_searchBar];
0
dacoinminster