在我的代码中,我有一个表格,里面有静态单元格的故事板。我正试图在点击最后一个静态单元格时触发一个方法。
我应该在代码中写什么来实现这一目标。如何在不触发错误的情况下引用代码中的静态单元格。
答案 0 :(得分:77)
在viewController中添加:
@property (nonatomic, weak) IBOutlet UITableViewCell *theStaticCell;
将该插座连接到故事板中的单元格。
现在使用tableView:didSelectRowAtIndexPath
方法:
UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
if (theCellClicked == theStaticCell) {
//Do stuff
}
答案 1 :(得分:9)
使用静态单元格,您仍然可以实现- tableView:didSelectRowAtIndexPath:
并检查indexPath。一种方法是,使用#define
定义特定的indexPath,并检查seleted行是否在该indexPath,如果是,则调用[self myMethod].
答案 2 :(得分:3)
这是混合静态和动态细胞时的看法,
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let staticIndexPath = tableView.indexPathForCell(self.staticCell) where staticIndexPath == indexPath {
// ADD CODE HERE
}
}
这可以避免创建新单元格。
我们都用于创建单元格并在cellForRowAtIndexPath
答案 3 :(得分:0)
根据CiNN的回答,这是解决此问题的 Swift 3 版本。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let staticIndexPath = tableView.indexPath(for: OUTLET_TO_YOUR_CELL), staticIndexPath == indexPath {
// ADD CODE HERE
}
}
这种方法不允许实现cellForRow方法,特别是如果你在故事板上使用静态单元格。
答案 4 :(得分:0)
我认为您遇到了同样的问题。覆盖tableView:didSelectRowAt
时,我一直收到错误消息,原因是我习惯于仅调用super.tableView:didSelectRowAt
,但是在这种情况下,我们不想这样做。因此,只需删除对超类方法的调用,以避免运行时错误。