【发布时间】:2020-04-18 01:20:58
【问题描述】:
所以我有一个应用程序,它允许用户从 tableview 的列表中选择电影(由 api 填充),点击电影会呈现一个包含更多细节的视图。我想实现一个搜索栏,以便用户可以搜索特定的电影,但是我遇到了一些麻烦
我假设下面的函数可以让下面的 tableview 可以搜索电影
var newMovies: [NSDictionary] = []
...
func searchBar() {
let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50))
searchBar.delegate = self
searchBar.showsScopeBar = true
searchBar.tintColor = UIColor.lightGray
self.tableView.tableHeaderView = searchBar
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText == "" {
fetchMovies()
}
else {
if searchBar.selectedScopeButtonIndex == 0 {
newMovies = newMovies.filter({ (NSDictionary) -> Bool in
return NSDictionary.lowercased().contains(searchText.lowercased())
})
}
else {
}
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return newMovies.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MovieCell", for: indexPath) as! MovieSearchTableViewCell
let movie = newMovies[indexPath.row]
let title = movie["title"] as! String
let overview = movie["overview"] as! String
cell.titleLabel.text = title
cell.overviewLabel.text = overview
但是,这会出现 2 个错误;
return NSDictionary.lowercased().contains(searchText.lowercased())
“任何”类型的值没有“包含”成员
“NSDictionary”类型的值没有“小写”成员
我应该返回 NSDictionary 以外的东西吗?
【问题讨论】:
-
你的电影模型对象是什么样的?您的未经过滤的电影在哪里?它们长什么样?
-
@Rob 没有未过滤的电影 过滤后的电影变量是对代码进行了一些不良实验的结果,我更新了变量名称以反映这一点,我不确定您所说的电影模型是什么意思对象
-
啊,我明白了,您只是在使用字典来表示您的电影。我假设
fetchMovies只是将 newMovies 数组重置为其原始值? -
@Rob 基本上,是的,
fetchMovies创建了一个 URLRequest 来获取 JSON 数据并将其分配给字典,也就是说是否可以通过这种方式实现搜索功能?跨度> -
您可以这样做,但效率低下。提示:使用两个数组,一个用于搜索模式,一个用于非搜索模式。使用布尔标志表示您处于搜索模式。
标签: swift uitableview uisearchbar uisearchbardelegate