2009-11-19 6 views
9

Wenn die Tastatur erscheint, möchte ich dieiPhone UISearchBar & keyboardAppearance

keyboardAppearance = UIKeyboardAppearanceAlert 

ich die Dokumentation überprüft haben setzen und es sieht aus wie Sie nur die keyboard ändern können.

Kann dies ohne Verletzung der privaten APIs von Apple getan werden?

Antwort

-2

keyboardAppearance ist eine Eigenschaft des UITextInputTraitsProtocol, was bedeutet, dass die Eigenschaft über das TextField-Objekt festgelegt wird. Ich bin mir nicht bewusst, was eine Alert-Tastatur ist, vom SDK ist es eine Tastatur, die für eine Warnung geeignet ist.

hier, wie Sie die Eigenschaft zugreifen:

UITextField *myTextField = [[UITextField alloc] init]; 
myTextField.keyboardAppearance = UIKeyboardAppearanceAlert; 

Nun, wenn der Benutzer tippt auf das Textfeld und die Tastatur erscheint, sollte es sein, was Sie wollen.

+1

Sie haben die Tatsache übersehen, dass dies von einer UISearchBar und nicht von einem UITextField kommt. Der UIKeyboardAppearanceAlert hat einen transparenten Hintergrund, den ich in allen meinen Apps beibehalten möchte. Dies kann erreicht werden, wie Sie es in UITextFields gezeigt haben, jedoch enthält die UISearchBar auch ein Textfeld. Ich wollte wissen, ob es möglich ist, die Tastaturdarstellung für dieses Textfeld einzustellen. –

+0

Mein schlechtes. In den Dokumenten scheint es keine Eigenschaft oder Methode zu geben, um die Tastaturtransparenz für die UISearchBar-Klasse festzulegen. Sie können nur den Tastaturtyp festlegen. – Justin

27

Dies sollte es tun:

for(UIView *subView in searchBar.subviews) 
    if([subView isKindOfClass: [UITextField class]]) 
     [(UITextField *)subView setKeyboardAppearance: UIKeyboardAppearanceAlert]; 

keine andere Art und Weise zu tun, fand ...

+0

Ich bestätige: es funktioniert: o) Ich habe keinen anderen Weg gefunden, es zu bekommen. Diese Antwort sollte akzeptiert werden. – CedX

+0

Ich denke, das funktioniert, aber ich fand eine andere, einfachere Lösung hier: http://stackoverflow.com/questions/1594346/dynamically-change-keyboard-type-for-a-uisearchbar – ecotax

+0

@ecotax: Sie verknüpfen zu einer Lösung über den keyboardType (default, ASCII, Numbers ...), aber hier handelt es sich um das KeyboardAppearance (hell, dunkel) – auco

9

Dies funktioniert nicht mehr auf iOS 7, weil die Hierarchie UISearchBar Ansicht geändert hat. Das UITextView ist jetzt eine Unteransicht der ersten Unteransicht (z. B. seine im searchBar.subviews[0].subviews Array).

Eine zukunftssicherere Möglichkeit wäre, die gesamte Ansichtshierarchie rekursiv zu überprüfen und nach UITextInputTraits Protokoll statt UITextField zu suchen, da dies die Methode tatsächlich deklariert. Eine saubere Methode, dies zu tun, ist die Verwendung von Kategorien. Zuerst machen Sie eine Kategorie auf UISearchBar, die diese Methode fügt hinzu:

- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence { 
    [(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence]; 
} 

Dann eine Kategorie auf UIView hinzufügen, die diese Methode fügt hinzu:

- (UIView *) firstSubviewConformingToProtocol: (Protocol *) pro { 
    for (UIView *sub in self.subviews) 
     if ([sub conformsToProtocol: pro]) 
      return sub; 

    for (UIView *sub in self.subviews) { 
     UIView *ret = [sub firstSubviewConformingToProtocol: pro]; 
     if (ret) 
      return ret; 
    } 

    return nil; 
} 

Sie nun über die Tastatur Auftritt auf der Suchleiste in der gleichen einstellen Art und Weise würden Sie ein Textfeld:

[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark]; 
+0

danke, sehr hilfreich! Ich denke, es gibt einen kleinen Tippfehler: "[sub subviewConformingToProtocol: pro]" sollte "[sub firstSubviewConformingToProtocol: pro]" sein. – auco

+0

@auco danke, korrigiert das! – stonemonk

35

Die beste Art und Weise, dass ich dies tun gefunden, wenn Sie es in Ihrer App tun wollen, ist Aussehen auf UITextField zu verwenden. Setzen Sie dies beim Start in Ihr AppDelegate.

[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark]; 
+0

Hat den Trick für mich gemacht, danke! – Funkycochise

+0

Viel besser jetzt! Danke – iGranDav

+0

Das war es auch für mich. Auf iOS7. Auch wenn die Kategorie Idee unten gut aussieht. –