直接进入主题,之前在网上收索如何自定义UISearchBar,得到的答案都是遍历子视图,但是现在不同的系统遍历子视图不都能拿到我们想要的视图,比如输入框和取消button。 1、如何去掉UISearchBar的背景,统一6.0、7.0、7.1 的样式。 下面是代码:
float version = [[[UIDevicecurrentDevice ] systemVersion ]floatValue ];
if ([searchBarrespondsToSelector :@selector (barTintColor)]) {
float iosversion7_1 =7.1 ;
if (version >= iosversion7_1){
//iOS7.1
[[[[searchBar.subviewsobjectAtIndex :0 ]subviews ]objectAtIndex :0 ]removeFromSuperview ];
[searchBarsetBackgroundColor :[UIColorclearColor ]];
}else{
//iOS7.0
[searchBarsetBarTintColor :[UIColorclearColor ]];
[searchBarsetBackgroundColor :[UIColorclearColor ]];
}
}else {
//iOS7.0 以下
[[searchBar.subviewsobjectAtIndex :0 ]removeFromSuperview ];
[searchBarsetBackgroundColor :[UIColorclearColor ]];
}
2、统一设置SearchBar的背景图片和输入框的清空按钮,注意设置背景颜色是不能成功的:
UIImage *image = [UIImage imageNamed:@"search_frame_n.png"];
[_citySearchBar setSearchFieldBackgroundImage:image forState:UIControlStateNormal];
[_SearchBarsetImage:[UIImageimageNamed:@"city_btn_null.png"]forSearchBarIcon:UISearchBarIconClearstate:UIControlStateNormal];
[_SearchBarsetImage:[UIImageimageNamed:@"city_btn_null.png"]forSearchBarIcon:UISearchBarIconClearstate:UIControlStateHighlighted];
3、设置取消button,我之前也是用遍历,发现在7.0之后苹果已经不允许访问了,所以我们可以在编辑时把SearchBar的宽度缩小,后面添加一个Button,这样样式标题都可以自定义,又可实现统一不同系统的样式。
4、最后收索现在一般都是和UISearchDisplayController组合使用,现在都是可以匹配文字和拼音的收索,PinYinForObjc的转换速度很快,是个不错的工具。