Вопрос по objective-c, iphone, ios – как изменить UISearchBar, чтобы заменить значок поиска внутри текстового поля с текстом

3

У меня есть UISearchBar, и я хочу удалить маркер поиска (значок лупы) и поставить вместо него текст

Ваш Ответ

4   ответа
1

Удаление изображения слева от UISearchbar, Нет общедоступного API для изменения или удаления лупы, и вы должны просто использовать UITextField.

15

адаптировать его к вашим потребностям: -

#import <UIKit/UIKit.h>

@interface SearchBoxExperimentsViewController : UIViewController {  
    IBOutlet UISearchBar *searchBar;
}
@end 

#import "SearchBoxExperimentsViewController.h"
@interface SearchBoxExperimentsViewController (Private)
- (void)setSearchIconToFavicon;
@end

@implementation SearchBoxExperimentsViewController
- (void)viewDidLoad 
{  
    [self setSearchIconToFavicon];  
    [super viewDidLoad];
}

#pragma mark Private
- (void)setSearchIconToFavicon 
{  
    // Really a UISearchBarTextField, but the header is private.  
    UITextField *searchField = nil;  
    for (UIView *subview in searchBar.subviews) {    
        if ([subview isKindOfClass:[UITextField class]]) {      
            searchField = (UITextField *)subview;      
            break;    
        }  
    }    
    if (searchField) {      
        UIImage *image = [UIImage imageNamed: @"favicon.png"];   
        UIImageView *iView = [[UIImageView alloc] initWithImage:image];    
        searchField.leftView = iView;    
        [iView release];  
    }  
}
@end 

У меня это сработало :)

не задевает ... не приходит в состояние
15

Swift 3.0

UISearchBar.appearance().setImage(UIImage(named: "image_name"), for: .search, state: .normal)

Objective-C

[[UISearchBar appearance] setImage:[UIImage imageNamed:@"image_name"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal]; 
Действительно, это должен быть принятый ответ. Я использовал вариант этой линии для стилизации и кнопки очистки.
2

вместо этого следует использовать обычный UITextField со следующим кодом для добавления метки в UITextField (если вы хотите удалить увеличительное стекло, что вас в любом случае привлекает в окне поиска?):

UILabel *searchFieldLeftLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 32, 15)];
searchFieldLeftLabel.text = @"find:";
searchFieldLeftLabel.placeholder = @"e.g. wings, Boathouse";
searchFieldLeftLabel.font = [UIFont systemFontOfSize:14];
searchFieldLeftLabel.textColor = [UIColor grayColor];
self.searchFieldLeftLabel.leftView = locationSearchFieldLeftLabel;
[searchFieldLeftLabel release];

Результатом является красивое текстовое поле, которое выглядит следующим образом:

enter image description here

И когда вы начинаете печатать текст, он заменяет заполнитель, но метка остается:

enter image description here

У меня есть панель поиска, как я могу отразить этот код на нем? Omar Freewan

Похожие вопросы