UISearchBar的使用

UISearchBar功能与UITextField类似,也是单行字符输入框

常用用途:用于搜索功能的实现

使用注意事项:

1、书签按钮属性与搜索回车按钮属性不能同时进行设置,只能二选一,否则会出现冲突

2、键盘中的回车按钮,默认是有输入的条件下才能进行点击响应

3、不能修改其输入源视图,默认是键盘

4、注意键盘的显示和隐藏,以及对输入控件的遮挡处理

5、通常退出按钮的显示是在代理方法中设置其显示或隐藏,而不是在初始化时就设置基显示

6、退出按钮标题默认是英文,可对其进行修改成中文显示,且修改前先显示退出按钮,否则第一次仍会显示为英文


UISearchBar *searchbar = [[UISearchBar alloc] init];
// 添加到父视图
[self.view addSubview:searchbar];
// 设置原点坐标与大小
searchbar.frame = CGRectMake(10.0, 50.0, (CGRectGetWidth(self.view.bounds) - 10.0 * 2), 40.0);


// 其他属性设置
// 显示类型
searchbar.barStyle = UIBarStyleBlack;
// 占位符,即提示信息
searchbar.placeholder = @"请输入搜索关键字";
//  顶部提示文本,相当于控件的Title
searchbar.prompt = @"iOS Dev";
// 是否显示书签按钮,默认隐藏(注意:书签按钮属性与搜索回车按钮属性不能同时进行设置,只能二选一,否则会出现冲突)
searchbar.showsBookmarkButton = YES;
// 是否显示退出按钮,默认隐藏(注意:通常退出按钮的显示是在代理方法中设置其显示或隐藏,而不是在初始化时就设置基显示)
//    searchbar.showsCancelButton = YES;
// 是否显示搜索回车按钮,默认隐藏(注意:书签按钮属性与搜索回车按钮属性不能同时进行设置,只能二选一,否则会出现冲突)
//    searchbar.showsSearchResultsButton = YES;
// 输入光标颜色
searchbar.tintColor = [UIColor redColor];
// 输入框边框颜色
searchbar.barTintColor = [UIColor brownColor];
// 输入框类型
searchbar.searchBarStyle = UISearchBarStyleProminent;


// 设置键盘类型
searchbar.keyboardType = UIKeyboardTypeURL;
// 设置回车键类型
searchbar.returnKeyType = UIReturnKeyGo;
// 添加键盘上方的子视图
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(self.view.bounds), 40.0)];
button.backgroundColor = [UIColor greenColor];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[button setTitle:@"隐藏键盘" forState:UIControlStateNormal];
[button addTarget:self action:@selector(hiddenKeyboard) forControlEvents:UIControlEventTouchUpInside];
searchbar.inputAccessoryView = button;


/*
设置代理
1、设置实现UISearchBar代理方法的代理对象
2、添加协议
3、实现代理方法
*/
searchbar.delegate = self;

@interface ViewController () <UISearchBarDelegate>

@end

// UISearchBarDelegate

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
    // 即将开始编辑
    NSLog(@"即将开始编辑");

    
    // 显示或隐藏退出按钮
    // 方法1
//    searchBar.showsCancelButton = YES;
    // 方法2
    [searchBar setShowsCancelButton:YES animated:YES];
    
    // 修改退出按钮标题为中文标题(注意:修改前先显示退出按钮,否则第一次仍会显示为英文)
    // 方法1 无效
    /*
     for (UIView *subView in searchBar.subviews)
     {
     if ([subView isKindOfClass:[UIButton class]])
     {
     UIButton *btn = (UIButton *)subView;
     [btn setTitle:@"取消"  forState:UIControlStateNormal];
     }
     }
     */
    // 方法2
    NSArray *subViews = searchBar.subviews;
    UIView *subView = subViews.firstObject;
    for (UIView *view in subView.subviews)
    {
        if ([view isKindOfClass:[UIButton class]])
        {
            UIButton *cancelButton = (UIButton *)view;
            [cancelButton setTitle:@"取消" forState:UIControlStateNormal];
            
            break;
        }
    }
    
    return YES;
}

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    // 已经开始编辑
    NSLog(@"即将结束编辑");
}

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
    // 即将结束编辑
    NSLog(@"即将结束编辑");
    
    // 显示或隐藏退出按钮
    // 方法1
//    searchBar.showsCancelButton = NO;
    // 方法2
    [searchBar setShowsCancelButton:NO animated:YES];
    
    return YES;
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar;
{
    // 已经结束编辑
    NSLog(@"已经结束编辑");
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    // 正在编辑过程中的改变
    NSLog(@"正在编辑过程中的改变");
}

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    // 正在编辑
    NSLog(@"正在编辑");
    
    /*
    通常用途
     1、判断输入的字符是否是限制输入的内容
     2、判断输入的字符长度是否是限制的输入的长度
     3、...
    */
    
    return YES;
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    // 点击了搜索按钮
    NSLog(@"点击了搜索按钮");
    
    // 获取搜索输入内容
    NSString *text = searchBar.text;
    NSLog(@"text = %@", text);
    
    // 隐藏键盘,即退出编辑
    [self hiddenKeyboard];
}

- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar
{
    // 点击了书签按钮
    NSLog(@"点击了书签按钮");
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    // 点击了退出按钮
    NSLog(@"点击了退出按钮");
    
    // 隐藏键盘,即退出编辑
    [self hiddenKeyboard];
}

- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar
{
    // 点击了结果列表
    NSLog(@"点击了结果列表");
}

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope
{
    // 点击了结果列表
    NSLog(@"selectedScopeButtonIndexDidChange");
}

// 隐藏键盘
- (void)hiddenKeyboard
{
    [self.view endEditing:YES];
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值