2012-10-30 8 views
9

Ich brauche eine vollständig transparente Suchleiste mit Abbrechen-Taste. Ich habe viele Lösungen ausprobiert, aber ich konnte noch keine bessere Lösung finden. Wenn ich versuche, die Hintergrundfarbe zu entfernen, wird die Bereichsleiste angezeigt. Kann mir irgendjemand einen Quellcode für eine vollständig transperante Suchleiste mit Can-Taste geben? HierWie ändere ich das Bild mit der Schaltfläche (x-Taste) oder die Farbe des Bildes mit der leeren Schaltfläche 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]; 

eine vollständig transparente searchbar Benötigen mit Knopf und Clear-Taste abbrechen, aber ohne scopebar.

Vielen Dank im Voraus

+0

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

+0

Ich fand die Lösung, aber ein anderes pblm, also aktualisierte ich meine Fragen – Arvind

Antwort

24

Ab iOS 5.0 können Sie folgendes tun:

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

Thats it. Möglicherweise möchten Sie auch die Zeile für den UIControlStateHighlighted-Status wiederholen.

Das letzte, was Sie tun sollten, ist in den Unteransichten der Suchleiste herum zu graben. Es ist garantiert, eines Tages zu brechen. Verwenden Sie die richtige API, um jedes Steuerelement anzupassen.

+2

leider der letzte Teil Ihrer Antwort funktioniert nicht. [siehe hier] (http://stackoverflow.com/questions/14720026/customizing-uisearchbariconclear-for-uicontrolstatehighlighted-does-not-work). – Dima

+0

In iOS 7.1 funktioniert diese Lösung http://stackoverflow.com/questions/13862050/custom-clear-button-in-uisearchbar-text-field#answer-19438100 perfekt. – Alex

+0

Sie müssen ein unterschiedliches Bild für hervorgehobene und normale Zustände verwenden. Ich meine, dass das Bild dasselbe sein kann, aber NICHT die gleiche UIImage * Referenz. – ingaham

4

Beachten Sie, dass Sie zuerst das UIControlHighlighted-Statusbild und dann das UIControlStateNormal-Statusabbild festlegen, da andernfalls ein Problem auftreten kann, bei dem der ClearIcon nicht im hervorgehobenen Status festgelegt ist. (. Nicht sicher, warum dieses Problem auftritt)

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

Für die von Ihnen dies in Swift versuchen (ich weiß, jemand geht, hierher zu kommen für diese Suche ...) hier geht:

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) 

Stellen Sie sicher, dass Sie das richtige Bild in Ihrem Assets.xcassets-Ordner haben.

0

Hier ist, wie Sie das Vergrößerungsglas ändern und Clear-Taste Symbol in einem UISearchBar der UITextField Ohne neue 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];