2015-01-20 14 views
9

Od pewnego czasu walczę z tym. Szukałem wszędzie, ale dostarczone rozwiązanie działa tylko z celem c. Która polega naZmień tło tekstu UISearchBarField

UITextField *txt = [_searchBar valueForKey:@"_searchField"];

Chociaż niektórzy mogą powiedzieć, że to jest chronione API i Apple może odmówić aplikację z takim kodem.

Tak, teraz próbowałem tak wiele sposobów, aby to rozwiązać i to w ogóle nie działa. Mój kod to:

searchBar = UISearchBar(frame: CGRectMake(0, 0, 320.0, 30.0)) 
searchBar.autoresizingMask = UIViewAutoresizing.FlexibleWidth 
searchBar.searchBarStyle = UISearchBarStyle.Minimal 
searchBar.layer.cornerRadius = 15 
searchBar.delegate = self 

searchBar.backgroundColor = UIColor.whiteColor() 

if floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1{ 
    // Load resources for iOS 6.1 or earlier 
    searchBar.placeholder = "Search"; 
} else { 
    // The following "hack" (if we can call that) breaks the UI for different size devices. 
    // Load resources for iOS 7 or later 
    searchBar.placeholder = "Search           "; 
} 

To daje mi dziwny wynik: enter image description here

Podczas czego chcę to po prostu pole tekstowe wewnątrz UISearchBar mieć białe tło i paska wyszukiwania sama posiadać cornerRadius z , powiedzmy, 15.

Jak mogę to zrobić?

Dzięki tak dużo wcześniej

+0

UITextField * searchField = [SearchBar valueForKey: @ "_ searchField"]; searchField.textColor = [UIColor whiteColor]; Użyłem już tego kodu w mojej aplikacji i aplikacji, która jest już dostępna w App Store. – Bhoomi

Odpowiedz

22

Musisz otworzyć UITextField wewnątrz UISearchBar. Można to zrobić przez użyciu valueForKey("searchField")

var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField 

textFieldInsideSearchBar?.textColor = yourcolor 
textFieldInsideSearchBar?.backgroundColor = backgroundColor 
... 

nie można zmieniać żadnych parametrów jak textColor lub backgroundColor w UITextField

+10

powinieneś ustawić styl jako 'Prominent' lub' Default. 'Jeśli wolisz używać 'Minimal',' backgroundColor' nie działa. 'searchBar.searchBarStyle = UISearchBarStyle.Prominent // lub .Default' – fatihyildizhan

+1

@fatihyildizhan dziękuję, że to jest naprawdę bardzo ważne, aby NIE używać stylu minimalnego! spędziłem za dużo czasu na tym .... – Altimac

8

dodając do powyższej odpowiedzi. Jeśli chcesz zachować UISearchBarStyleMinimal pasek wyszukiwania styl i zmienić tło textField UISearchBar za ustawić BorderStyle pola tekstowego do UITextBorderStyleNone

Objective C:

self.searchBar.searchBarStyle = UISearchBarStyleMinimal; 

UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"]; 
    txfSearchField.borderStyle = UITextBorderStyleNone; 
    txfSearchField.backgroundColor = yourColor; 
+0

Szukałem w okolicy. To jest rozwiązanie, które naprawdę działa! – flame3

+0

Zgadzam się. To rozwiązanie działa, gdy 'UISearchBarStyle' jest ustawiony na' .minimal'. Testowane na iOS 10.3 – yohannes

+0

Działa, ale dlaczego? –

7

w Swift 3:

if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField { 
     txfSearchField.borderStyle = .none 
     txfSearchField.backgroundColor = .lightGray 
    } 
Powiązane problemy