更改UISearchBar上的放大镜图标

时间:2012-11-17 04:10:56

标签: iphone objective-c search uisearchbar

我希望能够为UISearchBar上的小放大镜图标设置我自己的图像。如果可能的话,我也希望能够移动它。有任何想法吗?目前,我只需要支持iOS5及以上版本。

6 个答案:

答案 0 :(得分:34)

对于支持iOS 5及更高版本的应用,您可以使用以下方法执行此操作,

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

UIControlStateNormalUIControlStateDisabled是搜索栏的两种可能状态。

对于在此之前使用操作系统版本的应用,这不会起作用。您可能需要在UISearchbar上创建一个类别,并通过枚举子视图来更改图标。

答案 1 :(得分:13)

如果您只想更改默认放大图标的颜色,可以将图像设置为使用模板模式,然后设置图像视图的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##>}];
}

答案 2 :(得分:2)

对于斯威夫特: -

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

答案 3 :(得分:0)

使用

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

答案 4 :(得分:0)

对于Swift 5

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

答案 5 :(得分:-2)

尝试打印所有子视图... iOS独立。

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

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

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