Изменение значка увеличительного стекла на UISearchBar

Я хочу иметь возможность установить собственное изображение для значка маленького увеличительного стекла на UISearchBar. Я также хотел бы иметь возможность передвинуть его, если это возможно. Есть идеи? В настоящее время мне нужна поддержка только для iOS5 и выше.

Ответ 1

Для приложений, поддерживающих iOS 5, вы можете использовать метод ниже,

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

UIControlStateNormal и UIControlStateDisabled - два возможных состояния для строки поиска.

Для приложений, использующих версию ОС до этого, это не сработает. Возможно, вам придется создать категорию на UISearchbar и изменить значок, перечислив подпрограммы.

Ответ 2

Если вы хотите просто изменить цвет значка увеличения по умолчанию, вы можете установить для изображения режим использования шаблона, а затем установить изображения 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##>}];
}

Ответ 3

Для Swift: -

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

Ответ 4

Используйте

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

Ответ 5

попробуйте распечатать все подзаголовки... iOS indipendent.

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

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

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