9 Stimmen

Wie ändert man das Bild der Clear-Schaltfläche (X-Schaltfläche) oder zumindest die Farbe des Bildes der Clear-Schaltfläche in der UISearchbar?

Ich brauche eine vollständig transparente Suchleiste mit Abbrechen-Schaltfläche. Ich habe viele Lösungen ausprobiert, aber noch keine bessere Lösung gefunden. Wenn ich versuche, die Hintergrundfarbe zu entfernen, wird die Scope-Leiste angezeigt. Kann mir jemand den Quellcode für eine vollständig transparente Suchleiste mit Abbruch-Schaltfläche geben?

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];

Benötige eine vollständig transparente Suchleiste mit Abbrechen- und Löschen-Schaltfläche, aber ohne Scope-Leiste.

Vielen Dank im Voraus

24voto

rmaddy Punkte 307342

Ab iOS 5.0 können Sie Folgendes tun:

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

Das war's. Sie möchten die Zeile möglicherweise auch für den UIControlStateHighlighted Zustand wiederholen.

Das Letzte, was Sie tun sollten, ist im Inneren der Subviews der Suchleiste herumzuwühlen. Es ist garantiert, dass Sie damit irgendwann Probleme bekommen. Verwenden Sie die entsprechende API, um beliebige Steuerelemente anzupassen.

6voto

Nishchith Cp Punkte 61

Stellen Sie sicher, dass Sie zuerst das Bild im UIControlHighlighted-Zustand und dann das Bild im UIControlStateNormal-Zustand einstellen, da andernfalls ein Problem auftreten könnte, bei dem das clearIcon nicht im hervorgehobenen Zustand gesetzt 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];

3voto

Luke Solomon Punkte 144

Für diejenigen von euch, die dies in Swift versuchen (ich weiß, dass jemand hierherkommt, um danach zu suchen...), hier ist es:

    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)

Vergewissern Sie sich, dass Sie das richtige Bild in Ihrem Assets.xcassets-Ordner haben.

0voto

Harshal Wani Punkte 2129

So ändern Sie das Lupen- und Löschen-Symbol in einem UITextField eines UISearchBar ohne neue Symbole:

// Referenz zum Textfeld der Suchleiste des Such-Display-Controllers (in meinem Fall).
UITextField *searchBarTextField = [self.searchDisplayController.searchBar valueForKey:@"_searchField"];

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

// Löschen-Schaltfläche
UIButton *clearButton = [searchBarTextField valueForKey:@"_clearButton"];
[clearButton setImage:[clearButton.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
clearButton.tintColor = [UIColor whiteColor];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X