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