表格视图单元格作为按钮

Posted

技术标签:

【中文标题】表格视图单元格作为按钮【英文标题】:Table view cell as button 【发布时间】:2012-03-02 09:40:29 【问题描述】:

我正在尝试将已分组的表格视图单元设置为按钮,但是我似乎无法在 XCode 4.2 的界面构建器中或以编程方式找到在哪里执行此操作。

我尝试将表格视图单元格链接到 IBAction,但它只允许我创建或链接到 IBOutlet。

作为临时修复,我在单元格中嵌入了一个矩形按钮,但按下时不会突出显示蓝色。

我在几个应用程序中看到了这项工作,一个例子是下面 Safari 应用程序中的清除历史记录和清除 Cookies 和数据按钮:

【问题讨论】:

【参考方案1】:

想象一下你的 IBAction 是这样的:

-(IBAction)buttonPressed
//Do my stuff

那么,你应该在你的委托中这样做:

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    //check if your cell is pressed
    BOOL myCellIsPressed = ...

     if(myCellIsPressed)
        [self buttonPressed];

要检查您的单元格是否被按下,您有几种方法,例如,如果您知道表格中按钮所在的行:

int myCellRow = 5;
if (myCellRow == IndexPath.row) //YES!

或者你可以在你的单元格中放置一个标签,然后检查是否是那个:

#define myTag 5

创建单元格时:

UITableViewCell *myCell = ...
myCell.tag = myTag

在 didSelectRowAtIndexPath 中:

UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if (selectedCell.tag == myTag) //YES!

【讨论】:

一个非常简单的问题,但是 didSelectRowAtIndexPath 如何知道实际按下了哪个单元格或行?我得到 BOOL 是为了检查它是否被按下,但它怎么知道是哪一个? 绝对精彩的回应,非常感谢 tonio。最后一个要明确的问题:IndexPath.row 是否代表用户所按下的内容?所以当你说 myCellRow == IndexPath.row 时,是不是说如果被按下的单元格称为 myCellRow 然后做点什么? 是的,就是这样!不客气,别忘了把答案标记为已解决,希望以后能帮到你!【参考方案2】:

这些不是按钮.. 清除cookies等功能在处理 表视图委托方法

 tableview : didselectRow 

在那里您可以找到选择了哪个部分和哪一行,并据此执行功能。

【讨论】:

以上是关于表格视图单元格作为按钮的主要内容,如果未能解决你的问题,请参考以下文章

当按钮覆盖在表格视图顶部时,如何防止表格视图单元格注册点击?

表格视图单元格的按钮与其他单元格混淆?

在表格视图单元格按钮上查看表格视图单元格文本

表格视图按钮索引单元格

在表格视图单元格中使用按钮出列单元格

使用显示/减少按钮展开/折叠表格视图单元格