从表视图控制器中的静态单元格中触发方法

时间:2012-03-14 14:07:57

标签: ios uitableview storyboard

在我的代码中,我有一个表格,里面有静态单元格的故事板。我正试图在点击最后一个静态单元格时触发一个方法。

我应该在代码中写什么来实现这一目标。如何在不触发错误的情况下引用代码中的静态单元格。

5 个答案:

答案 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,但是在这种情况下,我们不想这样做。因此,只需删除对超类方法的调用,以避免运行时错误。