取消选中Swift中的UITableview自定义复选框选项

时间:2016-04-02 10:10:32

标签: ios swift uitableview checkbox

我正在尝试使用UITableview创建一个自定义复选框列表,允许单个选择(但我应该能够选择尽可能多的选项)和自定义UITableCell。

我的自定义单元格包含一个Label和一个ImageView,我想要的就是更改IV中包含的图像。

我可以将我的didSelectRowAtIndexPath中的图像从未选中状态更改为已检查但没有问题但是我在将其从检查更改为未检查时遇到问题。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
    print("tableView -> didSelectRowAtIndexPath")

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CustomCellVC

    cell.backgroundColor = UIColor.clearColor()
    cell.ivRiskCellImage.image = UIImage(named: "CheckedBox")
}

我试图通过添加复选框图像作为突出显示的图像然后打开和关闭它来使用ImageView的突出显示状态,但它只进入if但忽略了if else,如果再次点击

    if(cell.ivCellImage.highlighted == false)
    {
        print("Highligth is OFF")
        cell.ivCellImage.highlighted = true
    }
    else if(cell.ivCellImage.highlighted == true)
    {
        print("Highligth is ON")
        cell.ivCellImage.highlighted = false
    }

以及检查IV内部的图像,这个if-else块被完全忽略

    if(cell.ivRiskCellImage.image!.isEqual(UIImage(named: "UncheckedBox")))
    {
        print("Is unchecked!")
        cell.ivRiskCellImage.image = UIImage(named: "CheckedBox")
    }
    else if(cell.ivRiskCellImage.image!.isEqual(UIImage(named: "CheckedBox")))
    {
        print("Is checked!")
        cell.ivRiskCellImage.image = UIImage(named: "UnheckedBox")
    }

此外,当我设法在点击时显示复选框图像时,我得到类似这样的内容

enter image description here

如果我尝试通过添加此

来设置cellForRowAtIndexPath中所有单元格的复选框
cell.ivRiskCellImage.image = UIImage(named: "CheckedBox")

复选框刻度不再是半透明而是白色,因为它应该是

enter image description here

有什么想法吗?我花了很多时间试图解决这个问题而没有任何运气。

2 个答案:

答案 0 :(得分:3)

而不是let cell = tableView.dequeueReusableCellWithIdentifier...我会使用

let cell = tableView.cellForRowAtIndexPath(indexPath) as! CustomCellVC

通过这种方式,您可以获得要更改图像的单元格的引用。当您想要回收单元格以获得更好的性能时,tableView.dequeueReusableCellWithIdentifier意味着在委托方法tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)中使用。 / p>

同样cell.ivRiskCellImage.image!.isEqual(UIImage(named: "UncheckedBox"))不起作用,因为UIImage(named: "UncheckedBox")创建了一个新的UIImage,它与你想要检查它的UIImage不同。

答案 1 :(得分:1)

我理解你想要改变图像形式Check and Uncheck,反之亦然

表视图委托主要有两种方法

– tableView:didDeselectRowAtIndexPath:
– tableView:didSelectRowAtIndexPath:

参考链接:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/#//apple_ref/occ/intfm/UITableViewDelegate/tableView:didDeselectRowAtIndexPath

虽然你可以在中做同样的事情 - tableView:didDeselectRowAtIndexPath:

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)
{
    print("tableView -> didSelectRowAtIndexPath")

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CustomCellVC

    cell.backgroundColor = UIColor.clearColor()
    cell.ivRiskCellImage.image = UIImage(named: "**unCheckedBox**")
}