我正在尝试实现一个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但是考虑到我在另一个VC使用的UISearchController中包含的TableviewController里面,我迷路了。
我的主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
我的CustomCell类
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
}
}
答案 0 :(得分:4)
根据我的理解,您的ProductResultTabController
与电池原型一起存在于故事板中。因此,调用resultsTableController = ProductResultTabController()
并不是创建TableViewController
最重要的部分,它正在为一个类或nib注册tableView :.您可以在笔尖中创建自己的单元格并在PRTC tableview.registerNib:
中调用viewDidLoad:
,但还有一种更方便的方式:
3 - 在你的主要VC viewDidLoad:
中,用以下内容替换resultsTableController = ProductResultTabController()`:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
resultsTableController = storyboard.instantiateViewControllerWithIdentifier(myStoryboardID)