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

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

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

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

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

【问题讨论】:

    标签: objective-c ios uitableview


    【解决方案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 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      相关资源
      最近更新 更多