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:
,但还有另一种稍微更方便的方法:
- 在故事板中创建您的 PRTC 并制作单元原型(我相信您已经完成了)
- 在 SB 中,转到属性检查器并为控制器提供故事板 ID
3 - 在主 VC 的 viewDidLoad:
中,将 resultsTableController = ProductResultTabController()` 替换为以下内容:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
resultsTableController = storyboard.instantiateViewControllerWithIdentifier(myStoryboardID)
我正在尝试实现 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:
,但还有另一种稍微更方便的方法:
- 在故事板中创建您的 PRTC 并制作单元原型(我相信您已经完成了)
- 在 SB 中,转到属性检查器并为控制器提供故事板 ID
3 - 在主 VC 的 viewDidLoad:
中,将 resultsTableController = ProductResultTabController()` 替换为以下内容:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
resultsTableController = storyboard.instantiateViewControllerWithIdentifier(myStoryboardID)