我用搜索栏制作了一个桌面视图。部分图片位于以下Google云端硬盘中:drive
代码如下:
import UIKit
class WinkelTableView: UITableViewController, UISearchResultsUpdating {
var winkels = ["Hunkemöller","Blokker","Standaard"]
var fotos = [UIImage(named: "hunk"),UIImage(named: "Blokker"), UIImage(named: "Standaard")]
private var searchController = UISearchController(searchResultsController: nil)
var filteredShops = [String]()
var filteredShopspics = [UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableHeaderView = self.searchController.searchBar
self.searchController.searchResultsUpdater = self
self.searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
//filter through the shops
if let searchTerm = self.searchController.searchBar.text {
self.filteredShops = self.winkels.filter { $0.localizedCaseInsensitiveContainsString(searchTerm) }
} else {
self.filteredShops = []
}
//update results tableView
self.tableView.reloadData()
}
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.searchController.searchBar.text == "" {
return self.winkels.count
} else {
return self.filteredShops.count
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell
if self.searchController.searchBar.text == "" {
cell.titel.text = self.winkels[indexPath.row]
cell.foto.image = fotos[indexPath.row]
} else {
cell.textLabel?.text = self.filteredShops[indexPath.row]
}
return cell
}
}
我想知道如何在我搜索的时候保持图片和商店名称下面提到的其他标签。现在我只能看到商店的名称..你也会在图片中看到这个。
答案 0 :(得分:0)
您的模型和设置比您需要的更复杂,因为您希望使用相同类型的单元格来正常显示结果。
它会采取一些修改来简化,所以请耐心等待:
resultsController
。 private var searchController = UISearchController(searchResultsController: nil)
if tableView == self.tableView
的所有地方代替`if self.searchController.searchBar.text ==""' cellForRowAtIndexPath
中,您在设置其他单元格时无法访问filteredPics
- 实际上您应该像在之前的检查中一样设置这两个部分。奖金 - 这是一种简化过滤功能的方法:
if let searchTerm = self.searchController.searchBar.text {
self.filteredShops = self.winkels.filter { $0.localizedCaseInsensitiveContainsString(searchTerm) }
}else{
self.filteredShops = []
}
要添加到(5),您可能需要创建一个小型数据结构,以将数据保存为字符串和图像的组合。尝试let data = [(text: String, image: UIImage)]
- 然后您可以通过data[index.row].text
访问它,并且您的过滤将是$0.text.contains...
。然后,您的数据模型将简化为data
和filteredData
。
要为(6)重新创建模型,请执行var data: [(text: String, image: UIImage)] = [(text: "Hunkemöller", image: UIImage(named: "hunk")), ...]