2012-10-30 15 views
9

Ho bisogno di una barra di ricerca completamente trasparente con pulsante Annulla. Ho provato molte soluzioni ma non ho ancora trovato una soluzione migliore. Quando provo a rimuovere il colore di sfondo mostra la barra di campo. Qualcuno può darmi qualche codice sorgente per Searchbar completamente transperant con pulsante can. EccoCome modificare l'immagine del pulsante di cancellazione (pulsante x) o almeno il colore dell'immagine del pulsante di cancellazione in UISearchbar?

addSearchbar.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5]; 
UITextField *sbTextField = (UITextField *)[self.addSearchbar.subviews lastObject]; 

for (UIView *subview in addSearchbar.subviews) 
{ 
    NSLog(@"%@",subview); 
    if ([subview isKindOfClass:[UITextField class]]) 
    { 
     sbTextField = (UITextField *)subview; 
     UIImage *image = [UIImage imageNamed: @"06_magnifying_glass.png"]; 
     UIImageView *iView = [[UIImageView alloc] initWithImage:image]; 
     iView.frame = CGRectMake(0, 0, 24, 24); 
     sbTextField.leftView.frame = CGRectMake(0, 0, 24, 24); 
     sbTextField.leftView = iView; 
     [sbTextField.rightView removeFromSuperview]; 
     CGFloat myWidth = 24.0f; 
     CGFloat myHeight = 24.0f; 
     UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)]; 
     [myButton setImage:[UIImage imageNamed:@"clear.png"] forState:UIControlStateNormal]; 
     [myButton setImage:[UIImage imageNamed:@"clear.png"] forState:UIControlStateHighlighted]; 

     [myButton addTarget:self action:@selector(doClear:) forControlEvents:UIControlEventTouchUpInside]; 
     sbTextField.rightView = myButton; 
     sbTextField.rightViewMode = UITextFieldViewModeWhileEditing; 
     break; 
    } 
    if([subview isMemberOfClass:[UISegmentedControl class]]) 
    { 
     UISegmentedControl *scopeBar=(UISegmentedControl *) subview; 
     scopeBar.tintColor = [UIColor clearColor]; 
    } 
} 
[sbTextField removeFromSuperview]; 
[addSearchbar addSubview:sbTextField]; 
[addSearchbar setSearchFieldBackgroundImage:[UIImage imageNamed:@"SearchBar.png"] forState:UIControlStateNormal]; 
CGRect sbFrame = self.addSearchbar.frame; 
// Set the default height of a textfield 
sbFrame.size.height = 31; 

/* 8 is the top padding for textfield inside searchbar 
* You may need to add a variable to 8 according to your requirement. 
*/ 
sbFrame.origin.y = 6+self.addSearchbar.frame.origin.y; 
sbTextField.frame = sbFrame; 
sbTextField.textColor = [UIColor lightGrayColor]; 
[sbTextField setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin]; 

bisogno di una barra di ricerca completamente trasparente con pulsanti e chiara, ma senza scopebar annullare.

Grazie in anticipo

+0

http://stackoverflow.com/questions/9704562/remove-or- override-the-clear-button-on-uisearchdisplaycontroller-in-a-uipopove –

+0

Ho trovato la soluzione ma un altro pblm così ho aggiornato le mie domande – Arvind

risposta

24

Come di iOS 5.0 è possibile effettuare le seguenti operazioni:

UIImage *imgClear = [UIImage imageNamed:@"clear"]; 
[addSearchBar setImage:imgClear forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

Ecco fatto. Si potrebbe anche voler ripetere la linea per lo stato UIControlStateHighlighted.

L'ultima cosa che dovresti fare è scavare nelle sottoview della barra di ricerca. È garantito per rompere un giorno. Utilizzare l'API corretta per personalizzare qualsiasi controllo.

+2

purtroppo l'ultima parte della risposta non funziona. [vedi qui] (http://stackoverflow.com/questions/14720026/customizing-uisearchbariconclear-for-uicontrolstatehighlighted-does-not-work). – Dima

+0

In iOS 7.1 questa soluzione http://stackoverflow.com/questions/13862050/custom-clear-button-in-uisearchbar-text-field#answer-19438100 funziona perfettamente. – Alex

+0

È necessario utilizzare un'immagine diversa per gli stati evidenziati e normali. Voglio dire, che l'immagine può essere la stessa, ma NON lo stesso riferimento UIImage *. – ingaham

4

Verificare di aver impostato prima l'immagine di stato UIControlHighlighted e poi l'immagine dello stato UIControlStateNormal oppure si potrebbe essere in presenza di un problema in cui clearIcon non è impostato nello stato evidenziato. (. Non so il motivo per cui si verifica questo problema)

[_searchBar setImage:[UIImage imageNamed:@"ClearIcon"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; 
[_searchBar setImage:[UIImage imageNamed:@"ClearIcon"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 
2

Per quelli di voi provare questo a Swift (so che qualcuno sta per venire qui alla ricerca di questo ...) Ecco qua:

self.searchBar.setImage(UIImage(named: "ico-cancel"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal) 
    self.searchBar.setImage(UIImage(named: "ico-cancel"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Highlighted) 

Assicurati di avere l'immagine corretta nella cartella Assets.xcassets.

0

Ecco come si modifica la lente di ingrandimento e icona del pulsante chiaro di un UISearchBar UITextField Senza nuove icone:

// Reference search display controller search bar's text field (in my case). 
UITextField *searchBarTextField = [self.searchDisplayController.searchBar valueForKey:@"_searchField"]; 

// Magnifying glass icon. 
UIImageView *leftImageView = (UIImageView *)searchBarTextField.leftView; 
leftImageView.image = [LeftImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
leftImageView.tintColor = [UIColor whiteColor]; 

    // Clear button 
UIButton *clearButton = [searchBarTextField valueForKey:@"_clearButton"]; 
[clearButton setImage:[clearButton.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal]; 
clearButton.tintColor = [UIColor whiteColor]; 
Problemi correlati