第一次尝试实现菜单。我在UITableViewCell
UITableView
中使用自定义UITableViewController.
TableView配置如下:
fileprivate configureTableView() {
tableView.register(UINib(nibName: TransactionTableViewCell.nibName, bundle: nil), forCellReuseIdentifier: TransactionTableViewCell.identifier)
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = TransactionEntryTableViewCell.defaultHeight
}
我在下面创建了这样的单元格:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0:
guard let cell = tableView.dequeueReusableCell(withIdentifier: TransactionTableViewCell.identifier, for: indexPath) as? TransactionTableViewCell else { DLog("ERROR getting TransactionTableViewCell"); return UITableViewCell() }
let entry = entries[indexPath.row]
cell.entry = entry
return cell
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: "newTransactionCell", for: indexPath)
cell.textLabel?.text = Strings.AddANewTransaction
return cell
default:
assert(false)
return UITableViewCell()
}
菜单相关方法如下:
override func tableView(_ tableView: UITableView, shouldShowMenuForRowAt indexPath: IndexPath) -> Bool {
print("shouldShowMenuForRowAt")
return true
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
print("canPerformAction")
return action == MenuAction.duplicate.selector()
}
override func tableView(_ tableView: UITableView, performAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) {
print("action = \(action)")
}
一切似乎都运转良好;但是,长按表格时,方法shouldShowMenuForRowAt
不会被调用。
我有一个工作正常的示例项目。但是,这不起作用。任何想法可能是什么原因?
答案 0 :(得分:1)
您应该覆盖UITableViewDelegate
方法,而不是NSObject
:
override func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool {
return action == MenuAction.duplicate.selector()
}
答案 1 :(得分:1)
您的问题是您实施了
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool
不是实际必需的方法:
override func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool
不客气,我在这个问题上浪费了一个小时!