2015-01-20 3 views
9

Sono alle prese con questo per un po 'di tempo. Ho cercato ovunque ma la soluzione fornita funziona solo con l'obiettivo-c. Che consiste nelModifica lo sfondo del campo di testo di UISearchBar

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

Anche se alcuni potrebbero dire che questa è protetta API e Apple potrebbe rifiutare un app con tale codice.

Così, ora ho provato così tanti modi per risolvere questo problema e non funziona affatto. Il mio codice è questo:

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

Questo mi dà il risultato bizzarro: enter image description here

Mentre quello che voglio è solo il campo di testo all'interno del UISearchBar di avere uno sfondo bianco e il SearchBar per sé un cornerRadius di , per esempio, 15.

Come posso fare questo?

Grazie mille in anticipo

+0

UITextField * searchField = [SearchBar valueForKey: @ "_ searchField"]; searchField.textColor = [UIColor whiteColor]; Ho già usato questo codice nella mia app e l'app è già disponibile nell'App Store. – Bhoomi

risposta

22

Devi accedere al UITextField all'interno del UISearchBar. Potete farlo da utilizzando valueForKey("searchField")

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

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

non è possibile modificare i parametri come textColor o backgroundColor della UITextField

+10

devi impostare lo stile come "Prominent" o "Default". Se preferisci usare "Minimal", "backgroundColor" non funziona. 'searchBar.searchBarStyle = UISearchBarStyle.Prominent // o .Default' – fatihyildizhan

+1

@fatihyildizhan grazie è davvero molto importante NON usare lo stile Minimal! ho passato troppo tempo su questo .... – Altimac

8

Aggiungendo alla risposta di cui sopra. Se si desidera mantenere l'UISearchBarStyleMinimal barra di ricerca stile e modificare lo sfondo di textField di UISearchBar, impostare borderStyle del textField per UITextBorderStyleNone

Objective C:

self.searchBar.searchBarStyle = UISearchBarStyleMinimal; 

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

Ho cercato in giro. Questa è la soluzione che funziona davvero! – flame3

+0

Sono d'accordo. Questa soluzione funziona quando 'UISearchBarStyle' è impostato su' .minimal'. Testato su iOS 10.3 – yohannes

+0

Funziona, ma perché? –

7

In Swift 3:

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