2012-11-17 8 views
10

Desidero poter impostare la mia immagine per l'icona della lente di ingrandimento su una UISearchBar. Mi piacerebbe anche essere in grado di spostarlo, se possibile. Qualche idea? Al momento, ho solo bisogno di supporto per iOS5 e versioni successive.Modificare l'icona della lente d'ingrandimento su una UisearchBar

+0

@ACB stato così gentile da rispondere a questa in un altro post ho avuto circa UISearchBar in cui ho chiesto a questo come una questione aggiunto nei commenti. Ha detto: "È possibile utilizzare per l'app iOS 5 come indicato di seguito.Per le app che utilizzano la versione del sistema operativo precedente, questo non funzionerà. ((Void) setImage: (UIImage *) iconImage forSearchBarIcon: (UISearchBarIcon) stato icona: (UIControlState) stato;" –

risposta

34

Per le applicazioni che supporta iOS 5 in poi, è possibile utilizzare il seguente metodo per fare questo,

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

UIControlStateNormal e UIControlStateDisabled sono i due stati possibili per barra di ricerca.

Per le app che utilizzano prima la versione del sistema operativo, questo non funzionerà. Potrebbe essere necessario creare una categoria su UISearchbar e modificare l'icona enumerando le sottoview.

+0

Per gli altri che sono pigri o vogliono un ulteriore chiarimento (ad esempio che questo è un metodo per UISearchBar): '[self.searchController.searchBar setImage: [UIImage imageNamed: @" YourImageHere "] forSearchBarIcon: UISearchBarIconSearch stato: UIControlStateNormal ]; o in qualsiasi altro punto del controller di ricerca/barra – gadu

-2

prova a stampare tutte le sottoview ... iOS indipendente.

for (id obj in _SearchBar.subviews) { 
    NSLog(@"%@", obj); 

    if ([obj isKindOfClass:[UIImage class]]) { 
    NSLog(@"probably found..."); 

    UIImage *img = obj; 
    [img setImage....]; 
    } 
} 
0

Usa

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

Se si desidera modificare solo il colore dell'icona di default di ingrandimento, è possibile impostare l'immagine per utilizzare la modalità modello e quindi impostare tintColor della visualizzazione dell'immagine.

if ([view isKindOfClass:[UITextField class]]) { 
    UITextField *textField = (id)view; 

    UIImageView *iconView = (id)textField.leftView; 
    iconView.image = [iconView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
    iconView.tintColor = <##dimmedColor##>; 

    // other styling: 
    textField.font = <##font##>; 
    textField.textColor = <##activeColor##>; 
    textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:<##searchBar##>.placeholder 
                     attributes:@{NSForegroundColorAttributeName: <##dimmedColor##>}]; 
} 
+0

ImageWithRenderingMode era la chiave. Mi è mancato a prima vista! –

2

Per Swift: -

UISearchBar.appearance().setImage(UIImage(named: "new_search_icon"), forSearchBarIcon: UISearchBarIcon.Search, state: UIControlState.Normal)