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];
- }