iOS 实现SearchBar搜索及关键词高亮教程
189 浏览量
更新于2024-08-30
收藏 187KB PDF 举报
本文档主要介绍了如何在iOS应用中实现`UISearchBar`搜索栏功能,并对搜索结果显示关键字高亮。开发者将使用JSON数据处理英雄联盟的英雄名单,然后在`UITableView`中展示搜索结果。
首先,为了实现搜索功能,我们需要从本地获取JSON数据。这可以通过读取存储在应用程序资源中的TXT文件完成,文件包含JSON格式的数据。以下是读取JSON数据的关键代码:
```swift
// 获取文件路径
let path = Bundle.main.path(forResource: "heros", ofType: "txt")
// 将文件内容转化为NSData
let data = try? Data(contentsOf: URL(fileURLWithPath: path!))
// 解析JSON数据
if let jsonData = data, let result = try? JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String: Any]] {
// 处理解析后的数据
}
```
解析后的数据通常是一个二维数组,每个元素是一个字典,代表一个英雄的信息。为了进行搜索,我们需要提取出与搜索相关的字段,例如英雄的昵称(`nick`)。可以创建一个数组来存储这些昵称:
```swift
var arrOfSearchBoxes = [String]()
for dict in result {
arrOfSearchBoxes.append(dict["nick"] as? String ?? "")
}
```
接下来,为了显示搜索结果,我们将使用`UITableView`。同时,我们会采用`UISearchController`来处理搜索行为。`UISearchController`可以方便地在当前界面显示搜索结果,无需跳转到新的视图控制器:
```swift
// 声明UISearchController属性
var searchController = UISearchController(searchResultsController: nil)
// 初始化UISearchController
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "搜索英雄"
navigationItem.searchController = searchController
definesPresentationContext = true
```
为了使搜索结果能高亮显示关键字,我们需要遵循`UISearchResultsUpdating`协议,并实现`updateSearchResults(for:)`方法。在这个方法中,我们可以根据用户的输入过滤数组,并更新`UITableView`的内容:
```swift
func updateSearchResults(for searchController: UISearchController) {
guard let searchText = searchController.searchBar.text else { return }
let filteredArray = arrOfSearchBoxes.filter { $0.contains(searchText) }
// 更新UITableView的数据源并刷新表格
// ...
}
```
为了在`UITableView`中显示高亮的关键字,你需要自定义`UITableViewCell`的`awakeFromNib()`方法,设置其文本标签(`UILabel`)为富文本,然后在显示搜索结果时,使用`NSMutableAttributedString`来高亮匹配的部分:
```swift
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let item = filteredArray[indexPath.row]
let range = (item as NSString).range(of: searchText)
let attributedString = NSMutableAttributedString(string: item)
if range.location != NSNotFound {
attributedString.addAttribute(.foregroundColor, value: UIColor.red, range: range)
}
cell.textLabel?.attributedText = attributedString
return cell
}
```
以上就是实现`UISearchBar`搜索栏及关键字高亮的基本步骤。通过这个过程,用户可以在搜索框中输入关键字,系统会实时过滤数据并在`UITableView`中显示高亮的结果。注意,实际应用中可能需要添加更多细节,如错误处理、用户体验优化等。
147 浏览量
280 浏览量
点击了解资源详情
146 浏览量
131 浏览量
136 浏览量
384 浏览量
299 浏览量
282 浏览量
weixin_38680664
- 粉丝: 2
- 资源: 941