UISearchBar

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;
    }
}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容