UITableViewController(结果控制器)中带有 UISearchController 的自定义单元格

Custom cell with UISearchController in UITableViewController (result controller)

我正在尝试实现 UISearchController(不是已弃用的 UISearchDisplayController)

我面临一个荒谬的时间问题。

当我尝试 dequeueResusableCellWithIdentifier 它不适用于我的 CellAutocompletion(UITableViewCell 子类化)

像这样:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let item = filteredProducts[indexPath.row]

    let cell:CellAutocompletion = self.tableView.dequeueReusableCellWithIdentifier("suggestionCell") as! CellAutocompletion

    cell.itemLabel?.text = item.item_name;

    return cell
}

这把我扔了fatal error: unexpectedly found nil while unwrapping an Optional value

但是 当我这样做时:

    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "suggestionCell");

有效。因此,对于默认 iOS 单元格,它可以工作,而我的自定义单元格则不行。有什么想法吗?

我想我问错了 tableview 但考虑到我在 UISearchController 中包含的 TableviewController 中,它被另一个 VC 使用,我迷路了。

我的主要 VC 实例化我的 searchController 和我遇到问题的 TableViewController。

    //ViewDidLoad
    resultsTableController = ProductResultTabController();
    resultsTableController.tableView.delegate = self;

    self.searchController = UISearchController(searchResultsController: resultsTableController);
    searchController.searchResultsUpdater = self;
    searchController.dimsBackgroundDuringPresentation = true;

    searchController.searchBar.sizeToFit()
    tableView.tableHeaderView = searchController.searchBar

我的自定义单元格Class

class CellAutocompletion:UITableViewCell{

@IBOutlet weak var itemLabel: UILabel!
@IBOutlet weak var parentItemLabel: UILabel!

}

ProductResultTabController(TableViewController 的子类)

class ProductResultTabController: UITableViewController {
var filteredProducts = [ITEM]();

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1;
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return filteredProducts.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let item = filteredProducts[indexPath.row]

    let cell:CellAutocompletion = self.tableView.dequeueReusableCellWithIdentifier("suggestionCell") as! CellAutocompletion!

    cell.itemLabel?.text = item.item_name;

    return cell
}


}

据我了解,您的 ProductResultTabController 与单元格原型一起存在于情节提要中。因此,调用 resultsTableController = ProductResultTabController() 并没有完成创建 TableViewController 的最重要部分,即为 class 或 nib 注册您的 tableView:。您可以在 nib 中创建您的单元格并在您的 PRTC viewDidLoad: 中调用 tableview.registerNib:,但还有另一种稍微更方便的方法:

  1. 在故事板中创建您的 PRTC 并制作单元原型(我相信您已经完成了)
  2. 在 SB 中,转到属性检查器并为控制器提供故事板 ID

3 - 在主 VC 的 viewDidLoad: 中,将 resultsTableController = ProductResultTabController()` 替换为以下内容:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
resultsTableController = storyboard.instantiateViewControllerWithIdentifier(myStoryboardID)