searchBar建立在view上的問題
要先創(chuàng)建一個底部view, 然后將searchBar添加到該view上面
//除去在搜索框后面的灰色背景
[_searchBar.subviews[0].subviews[0] removeFromSuperview];
[_searchBackView addSubview:_searchBar];
更改searchBar內(nèi)部textField的尺寸
新建一個類繼承UISearchBar, 重寫layoutSubviews,
要區(qū)分兩種情景, 即是否需要右側(cè)有個取消按鈕.
如果不需要, 則直接讓textField尺寸和外部設(shè)置的searchBar尺寸一致即可;
如果需要, 則外部傳進來的寬度, 原點坐標(biāo)和高度隨searchBar尺寸即可
- (void)layoutSubviews{
[super layoutSubviews];
// view是searchBar中的唯一的直接子控件
for (UIView *view in self.subviews) {
for (UIView *subView in view.subviews) {
if ([subView isKindOfClass:[UITextField class]]) {
UITextField *t = (UITextField *)subView;
if (!self.showsCancelButton) {
t.frame = self.bounds;
}
else{
CGFloat height = self.bounds.size.height;
t.frame = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, _width, height);
}
}
}
}
}
修改右側(cè)取消按鈕字體顏色大小等參數(shù)
記得_searchBar.showsCancelButton = YES;
UIView *topView = _searchBar.subviews[0];
for(UIView *subView in topView.subviews) {
if([subView isKindOfClass:NSClassFromString(@"UINavigationButton")]) {
UIButton *cancelButton = (UIButton *)subView;
cancelButton.titleLabel.font = [UIFont systemFontOfSize:15 * SCALE_WIDTH];
[cancelButton setTitleColor:THEME_COLOR forState:UIControlStateNormal];
cancelButton.enabled = YES;//UISearchBar失去焦點時, 取消按鈕enable為NO
break;
}
}
修改searchBar里面textField的背景顏色(默認是白色)
UIView *searchTextField = nil;
_searchBar.barTintColor = [UIColor whiteColor];
searchTextField = [[[_searchBar.subviews firstObject] subviews] lastObject];
searchTextField.backgroundColor = kRGBColor(239, 239, 243);
修改searchBar里面textField的圓角
UITextField *searchField = [_searchBar valueForKey:@"searchField"];
if (searchField) {
searchField.layer.cornerRadius = 10.0f;
}
取消按鈕中英文切換
在Project中info,在Localizations默認只有English這一項, 我們只需在Localizations上添加Chinese就可以了, 你還可以根據(jù)你的需要添加其他的語言.
如果用戶把手機語言設(shè)成英文, 那么顯示的就是英文, 設(shè)置成中文,那么顯示的就是中文.
感謝 http://blog.sina.com.cn/s/blog_7f6480790101fvlk.html
在serachBar內(nèi)部右側(cè)增加掃描按鈕
先寫個按鈕的懶加載
#pragma mark 掃描按鈕懶加載
- (NABaseButton *)btnOfScan{
if (!_btnOfScan) {
CGFloat myWidth = 16.0f;
CGFloat myHeight = 16.0f;
_btnOfScan = [NABaseButton buttonWithType:UIButtonTypeCustom];
_btnOfScan.frame = CGRectMake(0.0f, 0.0f, myWidth, myHeight);
[_btnOfScan setImage:[UIImage imageNamed:@"searchBarScan"] forState:UIControlStateNormal];
[_btnOfScan addTarget:self action:@selector(clickSearchBarRightView:) forControlEvents:UIControlEventTouchUpInside];
}
return _btnOfScan;
}
在視圖已經(jīng)出現(xiàn)的時候
#pragma mark - 視圖已經(jīng)出現(xiàn)
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
for(UIView *subView in _searchController.searchBar.subviews.firstObject.subviews) {
if([subView isKindOfClass: [UITextField class]]){
UITextField *searchField = (UITextField *)subView;
searchField.rightView = self.btnOfScan;
searchField.rightViewMode = UITextFieldViewModeAlways;
searchField.clearButtonMode = UITextFieldViewModeNever;
}
}
}