如何实现IOS_SearchBar搜索栏及关键字高亮

2020-01-15 18:12:42丽君

UISearchResultsUpdating协议方法


- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {

//初始化存储搜索结果的数组
self.arrOfSeachResults = [NSMutableArray array];

// 获取关键字
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchController.searchBar.text];

// 用关键字过滤数组中的内容, 将过滤后的内容放入结果数组
self.arrOfSeachResults = [[self.arrOfSeachBoxes filteredArrayUsingPredicate:predicate] mutableCopy];

// 完成数据的过滤和存储后刷新tableView.
[self.tableView reloadData];
}

tableView的DataSource


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

// 显示搜索结果时
if (self.searchController.active) {

 //以搜索结果的个数返回行数
 return self.arrOfSeachResults.count;
}
 //没有搜索时显示所有数据
 return self.arrOfSeachBoxes.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"pool"];

// 显示搜索结果时
if (self.searchController.active) {

// 原始搜索结果字符串.
NSString *originResult = self.arrOfSeachResults[indexPath.row];

// 获取关键字的位置
NSRange range = [originResult rangeOfString:self.searchController.searchBar.text];

// 转换成可以操作的字符串类型.
NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:originResult];

// 添加属性(粗体)
[attribute addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:range];

// 关键字高亮
[attribute addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];

// 将带属性的字符串添加到cell.textLabel上.
[cell.textLabel setAttributedText:attribute];

cell.textLabel.text = self.arrOfSeachResults[indexPath.row];

 } else {

 cell.textLabel.text = self.arrOfSeachBoxes[indexPath.row];

  }

 return cell;
}

总结

以上就是如何实现IOS搜索栏及搜索关键字高亮的全部内容,感兴趣的同学可以自己动手操作实现下,希望对大家的学习有所帮助。


注:相关教程知识阅读请移步到IOS开发频道。