UITableViewController 在初始化时没有选择单元格
Posted
技术标签:
【中文标题】UITableViewController 在初始化时没有选择单元格【英文标题】:UITableViewController doesn't select a cell on initialization 【发布时间】:2019-05-28 12:04:06 【问题描述】:我有以下UITableViewController
的子类:
final public class ILoveAppleSelectorTableViewController: UITableViewController
public weak var delegate: ILoveAppleSelectorTableViewControllerDelegate?
public var data = [ILoveAppleGroupModel]()
convenience init()
self.init(style: .plain)
convenience init(data: [ILoveAppleGroupModel])
self.init(style: .plain)
self.data = data
override public func viewDidLoad()
super.viewDidLoad()
title = "Select APple Product"
tableView.registerCellClass(CheckmarkTableViewCell.self)
tableView.allowsSelection = true
tableView.allowsMultipleSelection = false
// MARK: - Selection
public func selectItem(at indexPath: IndexPath)
tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
// MARK: - Table view data source
override public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return data.count
override public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell: CheckmarkTableViewCell = tableView.dequeueCell(for: indexPath)
let item = data[indexPath.row]
cell.textLabel?.text = item.material_group_name
return cell
override public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let selectedappleProduct = data[indexPath.row]
delegate?.ILoveAppleSelector(controller: self, didSelect: selectedappleProduct)
我创建它的一个实例并调用selectItem
方法:
let data = Array(appleProducts)
let selector = AppleProductSelector(data: data)
selector.selectItem(at: IndexPath(indexes: [0, 0]))
navigationController?.pushViewController(selector, animated: true)
我在调试器中检查selectItem
方法被成功调用,但是没有被选中。
如果我改为在 viewWillAppear
上选择一个项目,一切都会按预期工作,并且该项目显示为选中状态:
public override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
selectItem(at: selectedIndexPath)
【问题讨论】:
您想在表格视图首次出现时显示选中行的复选标记吗? 【参考方案1】:默认情况下,表格视图控制器会在表格视图显示时清除选择。
您正在实例化您的类,然后“选择”一行,然后将 VC 推入堆栈。当它出现时,它会清除选择。
在 IB / Storyboard 中,它由一个复选框控制:
(取消选中该框以防止选择清除)
在代码中,您可以将其添加到您的 init func 中(或者可能在 viewDidLoad()
中):
self.clearsSelectionOnViewWillAppear = false
【讨论】:
以上是关于UITableViewController 在初始化时没有选择单元格的主要内容,如果未能解决你的问题,请参考以下文章
iOS 15 上 UITableViewController 的便捷初始化崩溃
使用情节提要时未调用 UITableViewController 覆盖初始化函数
未调用 UITableViewController 初始化方法
iPhone - 两个不同的自定义单元格,具有不同的设计,在同一个 UITableViewController - 单元格保持初始大小