我正在寻找一种在自定义单元格中点击按钮后更改模型的简洁方法。它点击了这里重要的按钮而没有选择行,所以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!?
}
答案 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];
在我的示例中,我更改了按下按钮所在单元格的背景颜色。