2010-07-14 10 views
20

Posso rimuovere l'immagine a sinistra di uno UISearchbar e aggiungere una nuova immagine?Rimozione dell'immagine a sinistra di Uisearchbar

+1

Si prega di chiarire la vostra domanda. È difficile capire cosa stai cercando di chiedere. Forse pubblica il tuo codice con cui hai difficoltà o pubblica uno screenshot di qualcosa che ti aiuti a spiegare. – Jasarien

+0

in Uisearchbar c'è un campo di testo e c'è un'immagine di ricerca. Posso rimuovere quell'immagine di ricerca e aggiungere una nuova immagine in quel punto – a111

risposta

-4

Se intendi la lente d'ingrandimento, allora no. Non ci sono API pubbliche da modificare o rimuovere. Basta usare un UITextField invece.

+0

ok grazie ......... – a111

-1

In realtà è possibile. È necessario esaminare tutte le sottoview della barra di ricerca e quindi il campo del testo di ricerca.

0

Non è possibile rimuovere facilmente l'immagine, ma si può facilmente inserire un UIImageView per sostituire l'immagine, in questo modo:

UIImageView *searchIcon = [[UIImageView alloc] initWithImage:[MBUIFactory imageNamed:@"ic_search_normal.png"]]; 
searchIcon.frame = CGRectMake(10, 10, 24, 24); 
[self.searchBar addSubview:searchIcon]; 
[searchIcon release]; 

Ricordate - la vita è di circa barare;) ...

L'immagine ha essere allineati perfettamente ai pixel (giocare con i pixel), o la nuova immagine deve avere uno sfondo bianco in cui è necessario nascondere l'immagine originale ma che non interferisce con il resto della barra di ricerca (se si usa solo lo sfondo bianco per l'intera immagine, gli angoli di sinistra interferiranno con lo sfondo).

2

è possibile creare una sottoclasse UISearchBar e quindi utilizzare questo metodo:

- (void)setTextFieldLeftView:(UIView *)view 
{ 
    UITextField *searchField = nil; 
    for (UIView *subview in self.subviews) 
    { 
     if ([subview isKindOfClass:[UITextField class]]) 
     { 
      searchField = (UITextField *)subview; 
      break; 
     } 
    } 

    if (searchField != nil) 
    { 
     searchField.leftView = view; 
    } 
} 
11
// hide magnifying glass 
    UITextField* searchField = nil; 
    for (UIView* subview in searchBar.subviews) { 
     if ([subview isKindOfClass:[UITextField class]]) { 
      searchField = (UITextField*)subview; 
      break; 
     } 
    } 
    if (searchField) { 
     searchField.leftViewMode = UITextFieldViewModeNever; 
    } 

Questo nasconde lente di ingrandimento. Funziona bene.

36

in iOS 5.0 e versioni successive, è possibile personalizzare l'immagine barra di ricerca utilizzando

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

in una specifica istanza di un UISearchBar o attraverso un gruppo utilizzando il UIAppearance proxy.

+1

Nota: se stai cercando di sbarazzarti di l'immagine del tutto (cioè non sostituirla con qualcos'altro), quindi questo metodo non funzionerà poiché se lo si imposta su 'nil', in realtà non rimuoverà l'immagine. – Senseful

+11

È inoltre possibile attribuire un'immagine non nulla: [_searchBar setImage: [UIImage new] forSearchBarIcon: UISearchBarIconSearch state: UIControlStateNormal]; – Diwann

+0

Funziona, ma qual è il modo consigliato per riallineare il testo al margine sinistro? –

0

in iOS6 almeno c'è una proprietà [searchbar setImage:<#(UIImage *)#> forSearchBarIcon:<#(UISearchBarIcon)#> state:<#(UIControlState)#>]

u possibile impostare :)

7

Per rimuovere completamente l'icona, è possibile utilizzare le seguenti righe di codice:

Objective-C:

// Remove the icon, which is located in the left view 
[UITextField appearanceWhenContainedIn:[UISearchBar class], nil].leftView = nil; 

// Give some left padding between the edge of the search bar and the text the user enters 
[UISearchBar appearance].searchTextPositionAdjustment = UIOffsetMake(10, 0); 

Swift:

// Remove the icon, which is located in the left view 
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).leftView = nil 

// Give some left padding between the edge of the search bar and the text the user enters 
UISearchBar.appearance().searchTextPositionAdjustment = UIOffsetMake(10, 0) 
+1

Ha funzionato! Grazie, Jeff. –

3

sostituire l'icona barra di ricerca con un'immagine trasparente 1x1 e compensare la posizione del testo

UIImage *blank = [UIImage imageNamed:@"blank"]; 
[self.searchBar setImage:blank forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal]; 
self.searchBar.searchTextPositionAdjustment = UIOffsetMake(-19, 0); 
1

Usa questo codice per nascondere l'icona della barra di ricerca: -

[searchBarItems setImage:[UIImage imageNamed:@"searchIcon.jpg"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal]; 

Scatta l'immagine trasparente con il nome searchIcon.jpg e l'icona nascondi il suo lavoro per me

10

a Swift 2.0 fare questo:

let textFieldInsideSearchBar = self.searchBar.valueForKey("searchField") as! UITextField 
textFieldInsideSearchBar.leftViewMode = UITextFieldViewMode.Never 
+0

anche questo funziona molto bene, se lo si desidera su base per controllo – Alnitak

+1

Perché qualcuno pensa che una risposta accettabile implichi 'valueForKey'? Questo ha il potenziale di rifiuto dell'app. – TheCodingArt

+0

http://stackoverflow.com/questions/11923597/using-valueforkey-to-access-view-in-uibarbuttonitem-private-api-violation –

1

O a Swift 4.0 la semplice one-liner:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).leftViewMode = .never 

NOTA: Questo eliminerà l'icona della mano sinistra da ALL UITextFields che sono contenuti all'interno UISearchBars.