初识UISearchBar

作者: 芝麻绿豆 | 来源:发表于2015-11-10 17:06 被阅读1567次

基本属性

  • barStyle
    UIBarStyleDefault 
    UIBarStyleBlack 
    UIBarStyleBlackOpaque 
    UIBarStyleBlackTranslucent 
  • placeholder:占位字符


  • prompt:标题


  • tintColor:光标颜色


  • 设置背景图片
 [searchBar setBackgroundImage:[UIImage imageNamed:@"infocollectClickImage"]];
  • 设置搜索框的背景图片
[searchBar setSearchFieldBackgroundImage:[UIImage imageNamed:@"infocollectClickImage"] forState:UIControlStateNormal];
  • searchBar.showsSearchResultsButton = YES;


  • 取消按钮
searchBar.showsCancelButton = YES;
[searchBar setShowsCancelButton:YES animated:YES];
  • 搜索框内的图片
[searchBar setImage:[UIImage imageNamed:@"search-search-icon"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];

设置cancel/取消按钮

1.利用系统的运行时(Runtime)机制设置:

    UIButton *btn = [[UIButton alloc] init];  
    btn.titleLabel.textAlignment = NSTextAlignmentCenter; 
    [btn setTitle:@"123" forState:UIControlStateNormal];    
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [searchBar setValue:btn forKeyPath:@"cancelButton"];

运行结果:达不到需求,需要调整按钮和搜索框的位置;


2.遍历UISearchBar的子控件,设置里面的button;

   [searchBar setShowsCancelButton:YES animated:YES];
    for ( id searchView in [[[searchBar subviews] lastObject]subviews])
 {       
     YANLog(@"%@",[searchView class]);        
     if ([[searchView class] isSubclassOfClass: NSClassFromString(@"UINavigationButton")]) {                   
                YANLog(@"%@",[searchView class]);
                UIButton *cancelBtn = (UIButton *)searchView;
              //[cancelBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
                [cancelBtn setTitle:nil forState:UIControlStateNormal];            
                [cancelBtn setBackgroundImage:[UIImage imageNamed:@"AppIcon29x29"] forState:UIControlStateNormal];     
       }
  }
  • 该方法如果设置title,设置titleColor与BackgroundImage将失效;字体的颜色将显示为系统的默认颜色;

  • 所以该方法只适合设置按钮的颜色和背景图片;文字只能显示cancel或者取消;



  • 可以将项目配置设置为支持中文,字体将显示为取消;

    项目配置方法
    项目配置方法
    注意点:
    显示cancel按钮的方法要写在自定义按钮方法前面

3.利用appearance 设置:

该方法不仅可以设置文字、颜色,还可以设置字体大小;

NSMutableDictionary *attr = [NSMutableDictionary dictionary];    
attr[NSFontAttributeName] = [UIFont systemFontOfSize:13];    
attr[NSForegroundColorAttributeName] = [UIColor redColor];    
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class] , nil] setTitle:@"N"];
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:attr forState:UIControlStateNormal];

运行结果:



注意点:


补充:

方法2与方法3基本可以满足需求;若修改太多,可以Textfile与button自定义一个搜索框;
而且方法2与3可以结合使用:


相关文章

网友评论

  • a73610582210:很清晰的总结 方便新手 谢谢楼主
  • XIAODAO:我的理解如下,希望指正:
    (1)UINavigationButton 是系统的一个私有类,cancelBtn 本身是 UINavigationButton类型 ,因此方法二里遍历UISearchBar的所有子控件时,可以使用 UINavigationButton
    (2)个人猜测,UINavigationButton 是UIButton的子类,因此方法一用KVC给取消按钮赋值时,可以直接用UIButton
    (3)cancelBtn 里面的内容对应的是另外一个私有属性 _cancelBarButtonItem ,类型是 UIBarButtonItem 。因此对于 cancelBtn 里面的内容,比如文字,文字颜色,文字大小 ,可以使用appearance来统一设置
    芝麻绿豆:@XIAODAO UI_APPEARANCE_SELECTOR是可以统一设置!
    XIAODAO:@芝麻绿豆 谢谢指点,长知识了。还有一点不明,Xcode里UISearchBar.h 里,并没有找到设置取消按钮的相关方法和属性,以及UI_APPEARANCE_SELECTOR,怎么判断是否能使用appearance统一设置呢?请教思路。能否用appearance统一设置,一般是看方法的后缀里是否包含UI_APPEARANCE_SELECTOR。
    芝麻绿豆:@XIAODAO 被你说的我都糊涂了!我现在又重新看了一下UISearchBar的子控件,其中你说的一个类型为UIBarButtonItem的 不是真正的cancelBtn,而是UISearchBar的子控件cancelBarButtonItem!(具体是哪个控件,目前没有用到,我也不清楚);修改cancelBarButtonItem这个子控件是没有任何变化的!
    我利用UINavigationButton这个类型进行判断的具体原因是应为UISearchBar的子控件里面有好几个是UIButton类型的! UINavigationButton确实是UIButton的子类;UINavigationButton这个类型是我通过XCode查看视图结构得到的具体类型!能不能使用appearance统一设置,需要查看官方的API说明!
  • XIAODAO:已验证:
    方法一和三,setShowsCancelButton:animated:这个方法必须调用,但顺序先后无影响。方法二,setShowsCancelButton:animated:这个方法必须先调用。
  • XIAODAO:请问"利用系统的运行时(Runtime)机制设置" ---“调整按钮和搜索框的位置”,这个怎么实现,是用KVC给cancelButton.frame赋值吗?
    XIAODAO:@芝麻绿豆 是的,用KVC给cancelButton.frame赋值无效,已证
    芝麻绿豆:@XIAODAO 问中说了,这个方法不可行的!
  • XIAODAO:"利用系统的运行时(Runtime)机制设置"之后,自定义的取消按钮需要使用addTarget进行监听,系统自带的取消按钮的代理方法失效了- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
  • OCSwift:UISearchBar
  • 碧落哀鸣:搞基,真是哪都有你啊
    芝麻绿豆:@碧落哀鸣 ??????
  • 帆动世界:一直不知道搜索怎么实现,受教了
    芝麻绿豆:@帆动世界 😉
  • 56d9056ef3da:真心不错
    芝麻绿豆:@我是爱晒太阳的熊先生 谢谢😝
  • 船长_:有图有真相,不错!!!!
    芝麻绿豆:@船长_ 船长的也很棒
  • 对酒当歌的夜:活捉楼上C4索隆
  • GryllsNSTimer:无处不在的我~

本文标题:初识UISearchBar

本文链接:https://www.haomeiwen.com/subject/warhhttx.html