user319436
user319436

Reputation:

Change the magnifying glass icon on a UISearchBar

I want to be able to set my own image for the little magnifying glass icon on a UISearchBar. I'd also like to be able to move it around if possible. Any ideas? Currently, I only need support for iOS5 and above.

Upvotes: 10

Views: 12971

Answers (6)

kumar
kumar

Reputation: 151

For Swift 5

  searchBar.setImage(UIImage(named: "your_favicon"), for: .search, state: .normal)

Upvotes: 0

Vivek Bansal
Vivek Bansal

Reputation: 1326

For Swift :-

UISearchBar.appearance().setImage(UIImage(named: "new_search_icon"), forSearchBarIcon: UISearchBarIcon.Search, state: UIControlState.Normal)

Upvotes: 2

Yang Meyer
Yang Meyer

Reputation: 5709

If you want to just change the color of the default magnifying icon, you can set the image to use template mode and then set the image view’s tintColor.

if ([view isKindOfClass:[UITextField class]]) {
    UITextField *textField = (id)view;

    UIImageView *iconView = (id)textField.leftView;
    iconView.image = [iconView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    iconView.tintColor = <##dimmedColor##>;

    // other styling:
    textField.font = <##font##>;
    textField.textColor = <##activeColor##>;
    textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:<##searchBar##>.placeholder
                                                                      attributes:@{NSForegroundColorAttributeName: <##dimmedColor##>}];
}

Upvotes: 13

user319436
user319436

Reputation:

Use

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

Upvotes: 0

elp
elp

Reputation: 8131

try print all subviews... iOS indipendent.

for (id obj in _SearchBar.subviews) {
  NSLog(@"%@", obj);

  if ( [obj isKindOfClass:[UIImage class]] )  {
     NSLog(@"probably found...");

     UIImage *img = obj;
     [img setImage....];
  }
}

Upvotes: -2

iDev
iDev

Reputation: 23278

For apps which supports iOS 5 onwards, you can use the below method to do this,

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

UIControlStateNormal and UIControlStateDisabled are the two possible states for search bar.

For apps which uses OS version before this, this wont work. You might have to create a category on UISearchbar and change the icon by enumerating the subviews.

Upvotes: 35

Related Questions