【发布时间】:2014-11-10 02:59:07
【问题描述】:
我有一个自定义的 UITableViewCell 子类及其关联的 xib。我在这个单元格中有一个UILabel 和一个UIButton,我已将按钮的内部操作连接到子类。
我需要的是当点击单元格中的按钮时,获取具有该按钮的单元格的索引路径。并且可能通过委托或其他方式将其发送回视图控制器。
因为我在 UITableViewCell 子类中,所以我不能使用像 this 这样的解决方案,因为我没有从单元子类内部对 tableview 的引用。经过进一步调查,我找到了another 解决方案,并像这样在 Swift 中实现了它。
import UIKit
class ContactCell: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
selectionStyle = .None
}
@IBAction func callButtonPressed(sender: UIButton) {
let indexPath = (self.superview as UITableView).indexPathForCell(self)
println("indexPath?.row")
}
}
但是当我点击按钮时,它会崩溃并显示一条错误消息,提示 Swift 动态转换失败。
知道我的代码有什么问题吗?
或者我愿意接受任何其他可以让我以任何其他方式达到预期结果的建议。
谢谢。
【问题讨论】:
-
你知道相关indexPath的原因是什么?
println("indexPath?.row")显然不是真正的原因。这一切背后的模式是什么? -
@POB 原因是我已经取出了tableview 的数据源方法,并将它们放在一个单独的可重用类中,如this 文章中所述。我的自定义单元格有一个按钮,现在我需要获取点击该按钮的单元格的索引路径。
-
@Isuru:几周前我回答了一个非常相似的问题here,但我不再认为这是一个好的应用程序设计。我认为您想要的是数据源(数组)中的索引,而不是单元格索引路径(结果相同,但第一个应用程序设计更好)。我们应该在数据源上构建模型,而不是懒惰地依赖单元格索引路径。
-
@POB 你是对的。我也有点意识到这一点,因为我真正想做的是具有该单元格中对象的属性的东西,而不是直接的索引路径。我要更改委托以返回索引。谢谢:)
标签: ios uitableview swift uibutton nsindexpath