搜索显示控制器更新表视图

时间:2016-01-31 18:54:40

标签: ios uitableview ios7 uisearchdisplaycontroller

我正在创建一个应用,目标iOS是7.0。所以我使用搜索显示控制器。当我尝试搜索时,我发出一个api请求,结果将在稍后发布,而不是搜索显示控制器更新表视图。所以它是空的,虽然我有搜索结果。我尝试过像

这样的东西
self.searchDisplayController?.searchResultsTableView.reloadData()

直接从请求中获取数据后,但它无法正常工作。

这是我的逻辑:

  func filterContextForSearchText(searchText: String) {
    BooksWorker.searchForBooks(searchText) { foundBooks in
      self.foundBooks = foundBooks
      if BooksWorker.books != nil {
        self.filteredBooks = BooksWorker.books.filter { book in
          return (book.name?.lowercaseString.containsString(searchText.lowercaseString))!
        }
      }
      self.searchDisplayController?.searchResultsTableView.reloadData()
    }
  }

  func searchDisplayController(controller: UISearchDisplayController, shouldReloadTableForSearchString searchString: String?) -> Bool {
    isSearch = true
    filterContextForSearchText(searchString!)
    return true
  }

我以这样的方式更新我的tableView:

  override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if isSearch {
      tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
      return filteredBooks.count
    } else {
      if BooksWorker.books != nil {
        tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
        return (BooksWorker.books?.count)!
      } else {
        showEmptyTableView()
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        return 0
      }
    }
  }

  override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 100
  }

  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if isSearch {
      let cell = tableView.dequeueReusableCellWithIdentifier(AppData.CellIdentifiers.UndownloadedBookCell) as! UndownloadedBookCell
      print("making cell")
      cell.setBook(foundBooks[indexPath.row])
      cell.delegate = self
      return cell
    } else {
      let cell = tableView.dequeueReusableCellWithIdentifier(AppData.CellIdentifiers.BookCell) as! BookCell
      cell.setBook(BooksWorker.books![indexPath.row])
      return cell
    }
  }

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

你应该更新tableView而不是searchDisplay self.tableView.reloadData()