2012-10-30 6 views
9

Potrzebuję w pełni przejrzystego paska wyszukiwania z przyciskiem anulowania. Próbowałem wielu rozwiązań, ale nie mogłem jeszcze znaleźć lepszego rozwiązania. Kiedy próbuję usunąć kolor tła, pokazuje pasek zakresu. Czy ktoś może mi podać jakiś kod źródłowy dla w pełni transperującego paska wyszukiwania z przyciskiem "can". OtoJak zmienić wyraźny obraz przycisku (przycisk x) lub co najwyżej kolor wyraźnego obrazu przycisku w pasku 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]; 

Need całkowicie przezroczysty searchbar z przycisku i jasne przycisku ale bez scopebar anulować.

góry dzięki

+0

http://stackoverflow.com/questions/9704562/remove-or- nadpisuję-czysty-przycisk-na-uisearchdisplaycontroller-in-a-uipopove –

+0

Dowiedziałem się o rozwiązaniu, ale inne pblm, więc zaktualizowałem moje pytania – Arvind

Odpowiedz

24

Jako iOS 5.0 można wykonać następujące czynności:

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

to wszystko. Możesz także powtórzyć linię dla stanu UIControlStateHighlighted.

Ostatnią rzeczą, którą powinieneś robić, jest przekopywanie się wewnątrz podpunktów paska wyszukiwania. Pewne złamanie pewnego dnia. Użyj odpowiedniego interfejsu API, aby dostosować dowolny formant.

+2

Niestety ta druga część twojej odpowiedzi nie działa. [patrz tutaj] (http://stackoverflow.com/questions/14720026/customizing-uisearchbariconclear-for-uicontrolstatehighlighted-does-notwork). – Dima

+0

W iOS 7.1 to rozwiązanie http://stackoverflow.com/questions/13862050/custom-clear-button-in-uisearchbar-text-field#answer-19438100 działa idealnie. – Alex

+0

Musisz użyć innego obrazu dla podświetlonych i normalnych stanów. Mam na myśli to, że obraz może być taki sam, ale NIE ten sam numer referencyjny UIImage *. – ingaham

4

Zobacz, czy najpierw ustawiłeś obraz stanu UIControlHighlighted, a następnie obraz stanu UIControlStateNormal, albo możesz napotkać problem, w którym clearIcon nie jest ustawiony w podświetlonym stanie. (. Nie wiem, dlaczego ten problem występuje)

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

Dla tych z Was, próbując w ten Swift (wiem, ktoś przyjdzie tu patrząc na to ...) tutaj przejść:

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) 

Upewnij się, że masz poprawny obraz w folderze Assets.xcassets.

0

Oto jak zmienić lupę i jasne ikonę przycisku W UISearchBar za UITextField bez nowych Icons:

// 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]; 
Powiązane problemy