2014-11-19 15 views

risposta

27

È possibile utilizzare un'immagine personalizzata di un'icona di ricerca bianca, come la barra di ricerca non modificherà la vostra immagine in dotazione. Per impostare un'immagine personalizzata, utilizzare questo metodo. (Link to documentation.)

- (void)setImage:(UIImage *)iconImage 
forSearchBarIcon:(UISearchBarIcon)icon 
      state:(UIControlState)state; 

Esempio di codice:

[searchBar setImage:[UIImage imageNamed:@"SearchIcon"] 
    forSearchBarIcon:UISearchBarIconSearch 
       state:UIControlStateNormal]; 

In Swift:

searchBar.setImage(UIImage(named: "SearchIcon"), for: .search, state: .normal) 
+0

u può aggiungere un po 'esempio .. –

+0

Non ho mai dovuto usare SearchBar quindi non ho un examp pronto per postare, ma https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchBar_Class/#//apple_ref/occ/instm/UISearchBar/setImage:forSearchBarIcon:state: forse questo può aiutarti –

+0

Forse questo metodo dovrebbe essere migliore: '- (UIImage *) imageForSearchBarIcon: icona (UISearchBarIcon) stato: (UIControlState) state' –

-2
if(IOS_7) { 
    self.searchBar.searchBarStyle = UISearchBarStyleMinimal; 
    self.searchBar.backgroundImage = [UIImage imageWithColor:[UIColor redColor] cornerRadius:5.0f]; 
} 
+2

Anche se questo snippet di codice può risolvere la domanda, [compresa una spiegazione] (http://meta.stackexchange.com/questions/114762/explaining-entally-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. – gunr2171

5

Come da anwser di Federica .... Per fare questo in rapida

var image: UIImage = UIImage(named: "search")! 
self.searchBar.setImage(image, forSearchBarIcon: UISearchBarIcon.Search, state: UIControlState.Normal) 
1

Assicurarsi che quando si utilizza l'API setImage, passare un'immagine con la modalità di rendering di UIImageRenderingModeAlwaysTemplate. Per esempio:

[self.searchBar setImage:[[UIImage imageNamed: @"icon-search"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal]; 
22

soluzione migliore che ho trovato è stato qui Changing the color of the icons in a UItextField inside a UISearchBar

(Questa soluzione utilizza l'icona originale di UISearchBar, non c'è bisogno di fornire il tuo asset grafica)

Convertito Swift (Swift 3):

if let textFieldInsideSearchBar = self.searchBar.value(forKey: "searchField") as? UITextField, 
     let glassIconView = textFieldInsideSearchBar.leftView as? UIImageView { 

      //Magnifying glass 
      glassIconView.image = glassIconView.image?.withRenderingMode(.alwaysTemplate) 
      glassIconView.tintColor = .whiteColor 
    } 
2

sulla scia alcune delle risposte qui

Se vuoi vedere e apportare le modifiche nello storyboard, sottrai innanzitutto la barra UISearch e fai come sopra.

Tuttavia aggiungere le modifiche in una variabile @IBInspectable e non dimenticare il @IBDesignable al top della classe e impostando la sottoclasse searchbar nella "ispettore identità"

ho aggiunto la sottoclasse di lavoro completo e codice qui sotto per sWIFT 3.0 Qui si sarà in grado di modificare il testo segnaposto, ricerca di testo e lente d'ingrandimento

import UIKit 

@IBDesignable 

class CustomSearchBar: UISearchBar { 
@IBInspectable var placeholderColor: UIColor? { 
    didSet { 

     let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField 
     let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel 
     textFieldInsideSearchBarLabel?.textColor = placeholderColor 
    } 
} 

@IBInspectable var textColor: UIColor? { 
    didSet { 
     let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField 
     textFieldInsideSearchBar?.textColor = textColor 
    } 
} 

@IBInspectable var magnifyingGlassColor: UIColor? { 

    didSet { 

     if let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField, 
      let glassIconView = textFieldInsideSearchBar.leftView as? UIImageView { 

      //Magnifying glass 
      glassIconView.image = glassIconView.image?.withRenderingMode(UIImageRenderingMode.alwaysTemplate) 
      glassIconView.tintColor = magnifyingGlassColor 

     }  } 
} 

}

0

per sWIFT 3

 searchBar.setImage(UIImage(named: "location-icon-black"), for: .search, state: .normal) 
1

Per solo cambiando il colore dell'icona di ricerca, senza alterare l'icona reale Swift 3:

if let textField = self.searchBar.value(forKey: "searchField") as? UITextField, 
    let iconView = textField.leftView as? UIImageView { 

    iconView.image = iconView.image?.withRenderingMode(UIImageRenderingMode.alwaysTemplate) 
    iconView.tintColor = UIColor.red 
} 

crea un risultato in questo modo:

altered search bar icon

6

Questo soultion lavorato per me su Xcode 8.2.1 in Swift 3.0.:

extension UISearchBar 
{ 
    func setPlaceholderTextColorTo(color: UIColor) 
    { 
     let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField 
     textFieldInsideSearchBar?.textColor = color 
     let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel 
     textFieldInsideSearchBarLabel?.textColor = color 
    } 

    func setMagnifyingGlassColorTo(color: UIColor) 
    { 
     let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField 
     let glassIconView = textFieldInsideSearchBar?.leftView as? UIImageView 
     glassIconView?.image = glassIconView?.image?.withRenderingMode(.alwaysTemplate) 
     glassIconView?.tintColor = color 
    } 
} 

Esempio di utilizzo:

searchController.searchBar.setPlaceholderTextColorTo(color: mainColor) 
searchController.searchBar.setMagnifyingGlassColorTo(color: mainColor) 
2

Swift-3:

extension UISearchBar 
{ 

    func setMagnifyingGlassColorTo(color: UIColor) 
    { 
     // Search Icon 
     let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField 
     let glassIconView = textFieldInsideSearchBar?.leftView as? UIImageView 
     glassIconView?.image = glassIconView?.image?.withRenderingMode(.alwaysTemplate) 
     glassIconView?.tintColor = color 
    } 

    func setClearButtonColorTo(color: UIColor) 
    { 
     // Clear Button 
     let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField 
     let crossIconView = textFieldInsideSearchBar?.value(forKey: "clearButton") as? UIButton 
     crossIconView?.setImage(crossIconView?.currentImage?.withRenderingMode(.alwaysTemplate), for: .normal) 
     crossIconView?.tintColor = color 
    } 

    func setPlaceholderTextColorTo(color: UIColor) 
    { 
     let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField 
     textFieldInsideSearchBar?.textColor = color 
     let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel 
     textFieldInsideSearchBarLabel?.textColor = color 
    } 
} 

chiamare questi metodo di estensione in questo modo:

searchBarTextField.setMagnifyingGlassColorTo(color: yourColor) 
searchBarTextField.setClearButtonColorTo(color: yourColor) 
searchBarTextField.setPlaceholderTextColorTo(color: yourColor)