在表格视图中搜索时如何更新图片

时间:2016-06-02 21:29:17

标签: ios swift tableview uisearchcontroller

我用搜索栏制作了一个桌面视图。部分图片位于以下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
    }


}

我想知道如何在我搜索的时候保持图片和商店名称下面提到的其他标签。现在我只能看到商店的名称..你也会在图片中看到这个。

1 个答案:

答案 0 :(得分:0)

您的模型和设置比您需要的更复杂,因为您希望使用相同类型的单元格来正常显示结果。

它会采取一些修改来简化,所以请耐心等待:

  1. 删除resultsController
  2. 将searchController声明更改为private var searchController = UISearchController(searchResultsController: nil)
  3. 使用if tableView == self.tableView的所有地方代替`if self.searchController.searchBar.text ==""'
  4. cellForRowAtIndexPath中,您在设置其他单元格时无法访问filteredPics - 实际上您应该像在之前的检查中一样设置这两个部分。
  5. 奖金 - 这是一种简化过滤功能的方法:

    if let searchTerm = self.searchController.searchBar.text {
        self.filteredShops = self.winkels.filter {   $0.localizedCaseInsensitiveContainsString(searchTerm) }
     }else{
         self.filteredShops = []
    }
    
  6. 要添加到(5),您可能需要创建一个小型数据结构,以将数据保存为字符串和图像的组合。尝试let data = [(text: String, image: UIImage)] - 然后您可以通过data[index.row].text访问它,并且您的过滤将是$0.text.contains...。然后,您的数据模型将简化为datafilteredData

  7. 要为(6)重新创建模型,请执行var data: [(text: String, image: UIImage)] = [(text: "Hunkemöller", image: UIImage(named: "hunk")), ...]