无法更改UItableviewcell按钮的图像

时间:2016-05-27 10:53:49

标签: ios swift uitableview

我在每个单元格中使用带有复选框按钮的UITableView。当用户点击该单元格或按钮时,该按钮的图像必须更改为“已选择”按钮。图片。但是当我点击任何单元格或按钮时,图像不会改变。

这是我的表格代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell : categoryCell = tableView.dequeueReusableCellWithIdentifier("categoryCell") as! categoryCell
    let dic : NSDictionary = categoryitem.objectAtIndex(indexPath.row) as! NSDictionary
    cell.category_name.text = dic.valueForKey("category_name") as? String


    return cell

}


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return categoryitem.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let cell : categoryCell = tableView.dequeueReusableCellWithIdentifier("categoryCell") as! categoryCell

    cell.category_button.setImage(UIImage(named: "check_checkbox"), forState: UIControlState.Normal)
    let dic : NSDictionary = categoryitem.objectAtIndex(indexPath.row) as! NSDictionary
    print(dic.valueForKey("category_id") as! String)
}

2 个答案:

答案 0 :(得分:1)

将didSelectRowAtIndexPath中的代码更改为

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let cell : categoryCell = tableView.cellForRowAtIndexPath(indexPath) as! categoryCell

    cell.category_button.setImage(UIImage(named: "check_checkbox"), forState: UIControlState.Normal)
    let dic : NSDictionary = categoryitem.objectAtIndex(indexPath.row) as! NSDictionary
    print(dic.valueForKey("category_id") as! String)
}

您犯了错误

let cell : categoryCell = tableView.dequeueReusableCellWithIdentifier("categoryCell") as! categoryCell

将返回单元格以供重用,但是您需要访问用户点击的indexPath上当前加载的单元格:)所以请使用cellForRowAtIndexPath。 cellForRowAtIndexPath返回indexPath

中当前加载的单元格

答案 1 :(得分:0)

您需要在cellForRowAtIndexPath方法中将目标添加到按钮复选框 在按钮回拨中,您可以更改图像。像这样

[cell.checkButton addTarget:self action:@selector(buttonclick:) forControlEvents:UIControlEventTouchUpInside];
 checkbutton.tag=indexpath.row;
-(void)buttonclick:(id)sender
{`
// you can change your image here..
}