在Swift中以编程方式选择表格单元格

小饼干

在Swift中,我可以选择一个表格单元格,如下所示:

 let indexPath = IndexPath(row: 0, section: 0);
 tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)

但是尝试这样调用didSelectRowAt

tableView.delegate?.tableView!(tableView, didSelectRowAt: indexPath)

哪个触发:

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = categoryListView.cellForRow(at: indexPath) as! CategoryCellView   // error here

    //do other stuff
}

并在//error here上面导致此错误Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

我将此类用于CategoryCellView单独的笔尖:

@IBDesignable
class CategoryCellView: UITableViewCell {
    @IBOutlet weak var myCategoryView: Category!
    var categoryId: Int?
    var index: Int?
}

我如何didSelectRowAt在这里触发

迈克·默佐克(Mike Mertsock)

cellForRow(at: indexPath)如果该单元格不可见,则可以返回nil-并且在调用selectRow之后该单元格可能不可见。因此,我建议更新您的didSelectRow实现,以避免as!强行展开并且更具防御性:

if let cell = categoryListView.cellForRow(at: indexPath) as? CategoryCellView {
    // do stuff with the cell
}

(或者,guard let如果更有意义,则可以使用

我建议不要直接didSelectRow从您自己的代码中调用UITableView或UITableViewDelegate函数(例如(或其他UIKit标准委托函数)),因为这会破坏这些函数的原始设计约定。如果直接在UITableView对象上调用didSelectRow,则可能导致错误或不良行为。相反,在您的类中编写另一个实现UITableViewDelegate的自定义函数,您可以在其中调用selectRow后更新相应的UITableViewCell。您可以从didSelectRow实现中调用相同的函数,从而重用一些代码。

根据您对didSelectRow方法中的单元格需要执行的操作,可以通过其他方式解决编程选择方案。例如:

  • 在cellForRowAt实现中,您可以检查indexPath == tableView.indexPathForSelectedRow或检查tableView.indexPathsForSelectedRows?.contains(indexPath) ?? false,以确定将要显示的单元格是否为选定的单元格。请注意,此时,单元格的isSelected值可能为false。之后,如果需要,UITableView会将isSelected设置为true。这导致第二种选择:
  • override func setSelected(_ selected: Bool, animated: Bool)如果您只需要更新特定表格视图单元格的外观,则在CategoryCellView中实现如果在调用selectRow时该单元格已经可见,则setSelected将立即被调用。如果在调用selectRow时该单元格不可见,则tableView(_:,cellForRowAt:)在用户滚动到该委托的调用之后,稍后将立即在该单元格上调用setSelected

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Angular 2中以编程方式插入表格单元格

如何在表格视图单元格中以编程方式添加视图,Swift

以编程方式选择 JTable 中的多个单元格

以编程方式检索Google表格单元格边框样式

通过循环在表格单元格+ iOS中以编程方式添加图像

如何以编程方式选择uitableview单元格?

jqGrid-如何在单元格编辑模式下以编程方式选择单元格?

以编程方式向以编程方式添加到表格单元格的标签添加约束

如何获取以编程方式在放置在iOS中的表格视图的单元格和单元格索引路径中的滚动视图中创建的视图的位置

如何以编程方式更改jTable中的单元格

以编程方式在UITableView单元格中显示UIStackView

以编程方式添加的 UITableView 中的单元格插入错误

动态表格视图单元格和 IBOutlets - 以编程方式保存来自 Stepper 内部单元格的数据

Javascript在表格单元格中查找选择元素

选择单元格中的特定文本-Google表格

在表格单元格中垂直居中选择输入

单击使用 jquery 选择表格中单元格的文本

在谷歌表格中取消选择或保存当前单元格

ListView以编程方式创建单元格

在 Swift 中添加表格单元格中的标签总和

为什么在以编程方式选择了单元格之后-单元格没有交互作用?

您可以通过编程方式在Google表格单元格中生成按钮吗?

以编程方式测试Google表格单元格是否在命名范围内

表格视图单元格中的Swift MPGTextField自动完成

Swift:在表格视图单元格中创建UILabel

文本在表格单元格SWIFT中重叠

在表格视图Swift中获取单元格的行

如何检测Swift 2中单击的表格单元格

表格视图单元格中的Swift 2.0 if语句