2013-10-19 10 views
20

Mit der neuen UIView Tönungsfarbe iOS7 wird es ziemlich einfach, eine ganze App schnell zu gestalten. Bei der Bearbeitung von UITextFields ändert sich sogar die Farbe des Textbereichs.iOS7 Tastatur Return/Erledigt/Suche Tönungsfarbe

Allerdings ist die Schaltfläche unten rechts unten (kann Done, Search, etc.) immer blau sein. Gibt es eine Möglichkeit, dies zu ändern? Es würde wirklich gut aussehen, wenn es mit der Tönungsfarbe des Rests der App übereinstimmt.

iOS7 UISearchBar keyboard

Antwort

29

Mit ein wenig Hack vielleicht können Sie den Effekt erzielen, den Sie suchen. Es ist jedoch möglicherweise nicht möglich, die Überprüfung der App zu bestehen.

-(NSArray*)subviewsOfView:(UIView*)view withType:(NSString*)type{ 
    NSString *prefix = [NSString stringWithFormat:@"<%@",type]; 
    NSMutableArray *subviewArray = [NSMutableArray array]; 
    for (UIView *subview in view.subviews) { 
     NSArray *tempArray = [self subviewsOfView:subview withType:type]; 
     for (UIView *view in tempArray) { 
      [subviewArray addObject:view]; 
     } 
    } 
    if ([[view description]hasPrefix:prefix]) { 
     [subviewArray addObject:view]; 
    } 
    return [NSArray arrayWithArray:subviewArray]; 
} 

-(void)addColorToUIKeyboardButton{ 
    for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) { 
     for (UIView *keyboard in [keyboardWindow subviews]) { 
      for (UIView *view in [self subviewsOfView:keyboard withType:@"UIKBKeyplaneView"]) { 
       UIView *newView = [[UIView alloc] initWithFrame:[(UIView *)[[self subviewsOfView:keyboard withType:@"UIKBKeyView"] lastObject] frame]]; 
       newView.frame = CGRectMake(newView.frame.origin.x + 2, newView.frame.origin.y + 1, newView.frame.size.width - 4, newView.frame.size.height -3); 
       [newView setBackgroundColor:[UIColor greenColor]]; 
       newView.layer.cornerRadius = 4; 
       [view insertSubview:newView belowSubview:((UIView *)[[self subviewsOfView:keyboard withType:@"UIKBKeyView"] lastObject])]; 

      } 
     } 
    } 
} 

Die App habe ich die Ansicht Hierarchie zu entschlüsseln war: http://revealapp.com/

Das Endergebnis ist wie folgt: Green Key

+1

Hah, ich habe Reveal heruntergeladen und getestet, nachdem ich diese Frage gestellt habe, um genau das zu experimentieren, was du oben getan hast. Hat das schon jemand auf einer veröffentlichten App probiert? Irgendwelche Rückmeldungen zum Review-Prozess? – Tyson

+1

Ich denke, es würde wahrscheinlich die Überprüfung fehlschlagen. Siehe diese Frage hier: [http://stackoverflow.com/questions/4202817/cani-i-tint-black-a-uikeyboard-if-so-how](http://stackoverflow.com/questions/4202817/can -i-tint-black-a-uikeyboard-wenn-so-wie) Alternativ können Sie versuchen, eine farbige Ansicht hinter die Tastatur zu stellen, um sie allgemein zu färben. –

+0

Auch ich würde mich wirklich freuen, wenn Sie meine Antwort abstimmen können. Ich bin neu in SO und ich bin wirklich niedrig auf rep, was mich davon abhält, direkte Bilder zu posten, wählen usw. Danke –

4

Sie können keine Taste Tönungsfarbe ändern, aber Sie keyboard Tint Farbe durch die Verwendung UIKeyboardAppearance

image

Beispiel einstellen: yourTextField.keyboardAppearance = UIKeyboardAppearanceDark;

Hier ist ein sehr schönes Dokument von Apple zur Verfügung gestellt, werfen Sie einen Blick hier:

Managing the Keyboard

+0

Danke, aber ich bin schon bewusst, die dunklen/leichten Tastaturen. Meine Frage bezog sich speziell auf den "Abweisen" -Button auf der Tastatur. Es scheint Apples Standard-iOS7-Tönungsfarbe zu entsprechen und hoffte daher, dass es auch geändert werden könnte - sieht aber nicht so aus. – Tyson

+0

Sie können sicherlich die Farbe des Tastaturfensters ändern. Es ist nicht dokumentiert und Sie müssen es in der Ansichtshierarchie finden. Es ist ein sehr leichter Patch, würde ich sagen. – Andy

0
let colors: [UIColor] = [.red, .blue, .green, .purple, .yellow, .orange, .brown] 

if let window = UIApplication.shared.windows.first(where: { 
    $0.isType(string: "UIRemoteKeyboardWindow") 
}) { 
    if let keyplaneView = window.subview(ofType: "UIKBKeyplaneView") { 
     for (i, keyView) in keyplaneView.subviews.filter({ 
      $0.isType(string: "UIKBKeyView") 
     }).enumerated() { 
      let view = UIView(frame: keyView.bounds) 
      view.backgroundColor = colors[i].withAlphaComponent(0.5) 
      keyView.addSubview(view) 
     } 
    } 
} 

Here is a color map of the keys in the UIKBKeyplaneView

Verwandte Themen