一、基本介绍
UISearchBar 是系统默认提供的搜索框,可以用于各种 iOS 应用中。其提供了一个文本框和一个用于响应用户点击的取消按钮,方便用户输入搜索关键字,同时也能够在用户输入关键字时实时显示建议词。以下是一个简单的示例:
// 创建 UISearchBar 实例 searchBar = [[UISearchBar alloc] init]; searchBar.placeholder = @"搜索"; [searchBar sizeToFit]; // 添加到视图上 [self.view addSubview:searchBar];
上述代码创建了一个 UISearchBar 实例,并将其添加到了视图中。其中 placeholder 属性代表搜索框内的提示文字。sizeToFit 方法会根据实际内容大小自适应搜索框大小。
二、属性详解
1. delegate
delegate 属性用于设置 UISearchBar 的代理对象。代理对象需要遵循 UISearchBarDelegate 协议,并实现协议中的方法,以响应 UISearchBar 的事件。以下是一个示例:
@interface SearchViewController () <UISearchBarDelegate> @property (nonatomic, strong) UISearchBar *searchBar; @end @implementation SearchViewController - (void)viewDidLoad { [super viewDidLoad]; // 创建 UISearchBar 实例 self.searchBar = [[UISearchBar alloc] init]; self.searchBar.delegate = self; [self.searchBar sizeToFit]; // 添加到视图上 [self.view addSubview:self.searchBar]; } #pragma mark - UISearchBarDelegate - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { // 处理搜索按钮点击事件 } @end
以上代码中,我们将 SearchViewController 设置为 UISearchBar 的代理对象,并实现了 searchBarSearchButtonClicked 方法来响应搜索按钮的点击事件。
2. placeholder
placeholder 属性用于设置搜索框内的提示文字,当用户还没有输入任何内容时,会显示该提示文字。示例如下:
searchBar.placeholder = @"请输入搜索关键字";
3. showsCancelButton
showsCancelButton 属性用于控制取消按钮的显示状态,可以通过该属性在不同的场景下动态控制取消按钮是否显示。示例如下:
// 隐藏取消按钮 searchBar.showsCancelButton = NO; // 显示取消按钮 searchBar.showsCancelButton = YES;
4. text
text 属性用于获取或设置搜索框内的文本内容。我们可以在 UISearchBarDelegate 对象的 searchBar:textDidChange 方法中获取该属性的值,以实现实时搜索的功能。示例如下:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { // 处理搜索框文本改变事件 NSLog(@"当前搜索框内的文本内容为:%@", searchText); }
5. autocapitalizationType
autocapitalizationType 属性用于控制文本自动大写的方式,可以取值为 None、Words、Sentences 和 AllCharacters。示例如下:
// 不自动大写 searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; // 每个单词首字母大写 searchBar.autocapitalizationType = UITextAutocapitalizationTypeWords; // 每个句子首字母大写 searchBar.autocapitalizationType = UITextAutocapitalizationTypeSentences; // 所有字母都大写 searchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
三、UISearchBarDelegate 协议方法
UISearchBarDelegate 协议提供了多个方法,以下是其中一部分的解释:
1. searchBarCancelButtonClicked:
当用户点击取消按钮时,触发该事件。
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { // 处理取消按钮点击事件 }
2. searchBarSearchButtonClicked:
当用户点击搜索按钮时,触发该事件。
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { // 处理搜索按钮点击事件 }
3. searchBar:textDidChange:
当搜索框内的文本发生改变时,触发该事件。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { // 处理搜索框文本改变事件 }
4. searchBarShouldBeginEditing:
当搜索框即将开始编辑时,触发该事件。
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { // 处理搜索框即将开始编辑事件 return YES; }
5. searchBarShouldEndEditing:
当搜索框即将结束编辑时,触发该事件。
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar { // 处理搜索框即将结束编辑事件 return YES; }
四、完整示例
@interface SearchViewController () <UISearchBarDelegate> @property (nonatomic, strong) UISearchBar *searchBar; @end @implementation SearchViewController - (void)viewDidLoad { [super viewDidLoad]; // 创建 UISearchBar 实例 self.searchBar = [[UISearchBar alloc] init]; self.searchBar.delegate = self; self.searchBar.placeholder = @"请输入搜索关键字"; self.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; self.searchBar.showsCancelButton = YES; [self.searchBar sizeToFit]; // 添加到视图上 [self.view addSubview:self.searchBar]; } #pragma mark - UISearchBarDelegate - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { // 处理取消按钮点击事件 } - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { // 处理搜索按钮点击事件 } - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { // 处理搜索框文本改变事件 } - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { // 处理搜索框即将开始编辑事件 return YES; } - (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar { // 处理搜索框即将结束编辑事件 return YES; } @end