2012-06-16 13 views
12

In meiner iOS5 iPhone-Anwendung, ich bin Einstellung der Tönung Farbe der Suchleiste folgenden Code:iOS - Abbrechen Anpassen Schaltfläche UISearchBar

searchBar.tintColor = UIColorMake(@"#EFEFEF"); 

RGB-Wert von #efefef sind (239.239.239)
Seine Arbeits fein. Wenn der Abbrechen-Button erscheint, ist der Text "Abbrechen" nicht sichtbar. Kann ich nur die Abbrechen-Schaltfläche mit transparentem Schwarz-Weiß-Text darauf anpassen?
ist es möglich, anzupassen?

+0

ich eine Antwort auf dieses Thema geschrieben haben hier : http://stackoverflow.com/questions/19206757/how-to-change-textcolor-of-cancel-button-of-uisearchbar-in-ios7. Verwenden Sie einfach die SHSearchBar, die nicht so ein Schmerz in den Arsch wie die UISearchBar ist. – blackjacx

Antwort

5

Sie für UISearchBar Subviews suchen könnte und suchen Sie die Taste abbrechen, ist es gefährlich, so zu tun, da die Schaltfläche Zum Beispiel ändern könnten Sie diese viewWillAppear

- (void) viewWillAppear:(BOOL)animated 
{ 
    //show the cancel button in your search bar 
    searchBar.showsCancelButton = YES; 
    //Iterate the searchbar sub views 
    for (UIView *subView in searchBar.subviews) { 
     //Find the button 
     if([subView isKindOfClass:[UIButton class]]) 
     { 
      //Change its properties 
      UIButton *cancelButton = (UIButton *)[sb.subviews lastObject]; 
      cancelButton.titleLabel.text = @"Changed"; 
     } 
    } 
} 

in Ihrer hinzufügen konnte, wie ich vorher sagte, könnte ändern, es ist ein Hack, um dies zu tun, Sie bleiben besser mit dem Original, oder erstellen Sie Ihre eigene Suchleiste.

+1

in ios 7 findet es keine Subviews – NSCry

+0

Dies ist nicht ratsam und ab iOS 5 ist der bessere Weg, dies zu handhaben, mit dem Aussehen Proxy wie Marián Černý in seiner Antwort beschreibt. –

4

Seit iOS5 Sie die Navigationsleiste, Toolbar, Tabbar bearbeiten und einig mehr mit diesem Code ...

NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys: 
              [UIColor darkGrayColor], 
              UITextAttributeTextColor, 
              [UIColor whiteColor], 
              UITextAttributeTextShadowColor, nil]; 
[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions]; 

habe ich es mit einem searchbar getestet, aber es sollte ähnlich funktionieren.

+0

Nein, tut es nicht. Wenn Sie sich die Dokumentation der Darstellung für die Suchleiste ansehen, bietet sie keine eindeutige Prozedur zum Ändern der Attribute der Suchschaltfläche. – csotiriou

42

Sie können die Schaltfläche Abbrechen unter iOS 5 mithilfe des Darstellungsproxys anpassen. Sie müssen das Aussehen von UIBarButtonItem ändern, wenn es in UISearchBar enthalten ist. Zum Beispiel die Titel Schriftart der Abbruch-Taste ändern können Sie:

NSDictionary *attributes = 
    [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIColor whiteColor], UITextAttributeTextColor, 
    [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5], UITextAttributeTextShadowColor, 
    [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
    [UIFont systemFontOfSize:12], UITextAttributeFont, 
    nil]; 
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] 
    setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] 
    setTitleTextAttributes:attributes forState:UIControlStateHighlighted]; 
+5

Dies sollte die akzeptierte Antwort sein. Es ist nicht hacky, es ist klar, und es funktioniert. Die aktuell akzeptierte Antwort könnte jederzeit brechen. – csotiriou

+1

Das ist großartig, um den Text auf der Schaltfläche zu ändern, aber wie ändert man die Schaltfläche selbst? zB - ändere die Tastengröße –

+1

Leider enthält die UISearchBar auch eine Clear-Schaltfläche (grauer Kreis mit einem x innen). Wenn du also das Hintergrundbild der Cancel-Schaltfläche mit dieser Methode änderst, ist die Clear-Schaltfläche ebenfalls betroffen ... –

0

Diese Methode funktioniert in IOS7

for (UIView *view in searchBar.subviews) 
    { 
     for (id subview in view.subviews) 
     { 
      if ([subview isKindOfClass:[UIButton class]]) 
      { 
       // customize cancel button 
       UIButton* cancelBtn = (UIButton*)subview; 
       [cancelBtn setEnabled:YES]; 
       break; 
      } 
     } 
    } 

prüfen diese https://stackoverflow.com/a/18150826/1767686

Verwandte Themen