在自定义UITableViewCell中点击UIButton后更改模型

时间:2015-09-06 22:34:37

标签: ios swift uitableview uibutton

我正在寻找一种在自定义单元格中点击按钮后更改模型的简洁方法。它点击了这里重要的按钮而没有选择行,所以didSelectRowAtIndexPath不是我感兴趣的。

例如

let array = [true, false, true]

当用户点击第二个单元格中的按钮时,模型应该变为

array[1] = true

cellForRowAtIndexPath中,按钮会添加目标操作:

cell.button.addTarget(self, action: "myAction:", forControlEvents: UIControlEvents.TouchUpInside)

动作如下:

func myAction(sender:UIButton!)
    {
        //how to change the model and reloadRowsAtIndexPaths since the sender is just a UIButton!?
    }

3 个答案:

答案 0 :(得分:0)

如果tableViewController中只有一个部分,则可以始终在button.tag = [indexPath row]内设置cellForRowAtIndexPath。然后,您的操作将始终知道从sender.tag值触摸了哪一行。快速而肮脏,但它会起作用。

或者,如果您将在具有多个部分的tableviews中重用此自定义单元格,则可以继承UIButton并为indexPath添加属性。然后,您始终可以访问section和row值。就个人而言,我会采用这种方法,因为从长远来看,它为您提供了最大的灵活性。

答案 1 :(得分:0)

cellForRowAtIndexPath()

cell.button.tag = indexPath.row

然后在你的函数 myAction()

 func myAction(sender:UIButton)
 {

   var index = sender.view.tag
    array[index] = true  // just like you want 

  } 

答案 2 :(得分:0)

我对你的问题有点不清楚 - 你是在问一下如果在单元格中按下按钮后如何更改uitableviewcell的内容那么一种方法就是在单元格中使用单元格的indexPath标记按钮在cellForRowAtIndexPath方法中创建。然后,按下按钮后,您可以从选择器中读取标签。

我刚试过这个并且它有效。创建单元格时添加以下行:

cell.tag=indexPath.row;

然后在您可以使用的按钮的选择器方法中:

NSInteger p=sender.tag;
int x=(int)p;
NSIndexPath *path = [NSIndexPath indexPathForRow:x inSection:0];

UITableViewCell *cell = [_tableView cellForRowAtIndexPath:path];
cell.backgroundColor=[UIColor blackColor];

在我的示例中,我更改了按下按钮所在单元格的背景颜色。