如何在 Swift 的自定义单元格中获取值组件的 indexPath?

Posted

技术标签:

【中文标题】如何在 Swift 的自定义单元格中获取值组件的 indexPath?【英文标题】:How to get the indexPath of value component in a custom cell in Swift? 【发布时间】:2014-08-21 22:09:02 【问题描述】:

我需要获取位于我的CustomCellS 类中的组件(开关、检查..)的indexPath.row。我正在自定义单元格类中尝试以下代码,但出现错误:

class CustomCellS: UITableViewCell
    @IBOutlet weak var switch: UISwitch!

    var cell: UITableViewCell = switch.superview as UITableViewCell //crash
    var tableView: UITableView = cell.superview as UITableView
    var indexPath: NSIndexPath = tableView.indexPathForCell(cell)

  ...
 

错误:线程 1:EXC_Breakpoint(code=EXC_i386_BPT, subcode=0x0)

如何获取这个组件的indexPath.row? 谢谢!

【问题讨论】:

查看我对此的回答:***.com/questions/16520151/… 【参考方案1】:

这根本不应该建立。 switch 是一个关键字。如果你真的想用这个词作为变量名,你应该把它放在反引号内。

看来您要做的只是访问其中单元格的indexPath。在这种情况下,您可以在 tableView 方法中创建单元格时为其设置一个属性。

但是从设计的角度来看,indexPath 是您的 tableView 用来跟踪事物的东西,您的单元通常应该对它“视而不见”,因为它不是它所关心的(这就是为什么 UITableViewCell没有内置这样的属性。)您可能能够做您需要做的事情,而不会向您的单元格暴露不必要的信息。

【讨论】:

【参考方案2】:

第一个问题是开关的视图很可能不是UITableViewCell 本身。 UITableViewCell 有几个子视图,其中之一是它的contentView。该 contentView 可能是您的 UISwitch 的超级视图。但是,这很容易解决;如果您有一个包含开关的单元格,那么根据定义,您已经拥有对该单元格本身的引用。

第二个问题是cell的superview不能保证是tableView。如果您确实需要一个单元格来引用 tableview,那么您可能应该将 tableView 添加为弱属性,并在创建单元格时传递对 tableview 的引用。

【讨论】:

我看到这个有代码吗?我不知道我是否需要在 tableViewCOntroller 或 CustomCellCONtroller 中引用它以及如何做到这一点..

以上是关于如何在 Swift 的自定义单元格中获取值组件的 indexPath?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift ios中的自定义TableView单元格中显示多个字符串值到多个标签?

Swift - 如何从单元格内单击 UIImageView 上的自定义 UITableViewCell 获取行数据

iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值

如何在 Tableview 单元格中获取 UIButton 的位置,并在 Swift 中添加目标?

如何在 Swift 上的单元格中添加删除按钮

在 Swift 中的自定义单元格中存储/检索核心数据