如何在集合视图中显示复选标记(图像)

时间:2016-03-23 13:04:52

标签: ios swift uicollectionview uicollectionviewcell checkmark

在Table视图中,我们可以轻松地在单元格上添加复选标记。

但是在Collection View中,当我们选择一个单元格(图像)时,我们如何设置复选标记?

我刚刚在单元格和图像视图中拍摄了一个图像视图并添加了刻度标记图像。我的代码如下。

但它不起作用。

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{

   //  handle tap events
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! customCollectionViewCell


    if(cell.checkMarkImage.hidden == true)
    {
        print("Hidden")
       cell.checkMarkImage.hidden = false

    }
    else
    {
         cell.checkMarkImage.hidden = true
        print("No Hidden")
    }
}

6 个答案:

答案 0 :(得分:4)

//委托方法cellForItemAtIndexPath

func collectionView(collectionView: UICollectionView,
cellForItemAtIndexPath indexPath: NSIndexPath) ->
UICollectionViewCell
{
    //Get a reference to our storyboard cell
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(
                                                            "pickSomecell",
                   forIndexPath: indexPath) as! pickSomeGridViewController

    //Show Images in grid view
    cell.cellImage.image = self.arrAllOriginalImages[indexPath.row]
                                                            as? UIImage        

    //Check Mark toggle.
    cell.toggleSelected()      

    //return cell.
    return cell
}

并在pickSomeGridViewController中显示选中或不选中checkMark图像。

class pickSomeGridViewController: UICollectionViewCell{
//Outlet of cell image.
@IBOutlet var cellImage: UIImageView!

//Outlet of checkMark image.
@IBOutlet var cellCheckMarkImage: UIImageView!

//Function  for select and deselect checkmark.
  func toggleSelected ()
  {
    //If image is selected.
    if (selected)
    {
            //Show check mark image.
            self.cellCheckMarkImage.hidden = false           
    }   

    else
    {
             //Hide check mark image.
            self.cellCheckMarkImage.hidden = true            
    }
  }   
 }

答案 1 :(得分:1)

我发现此代码有两个主要问题:

  1. 您使用dequeueReusableCellWithReuseIdentifier方法从集合视图缓存中获取不同的单元格,而不是屏幕上的单元格。 请改用集合视图的cellForItemAtIndexPath方法。
  2. 您尝试在单元格本身中保存单元格的状态(已选中/未选中)。使用UITableView / UICollectionView时常见的错误,这种做法无效。相反,每次集合视图调用数据源cellForItemAtIndexPath方法时,请将状态保留在其他位置(例如,在字典中)和 restore

答案 2 :(得分:1)

var arrData = NSMutableArray()    // 1.使用像这样的模态类对象创建一个ModalClass.swift和NSArray

 class CustomModal: NSObject {
        //Declare bool variable for select  and deselect login
        var is_selected = Bool()
        //you can declare other variable also
        var id = Int32()

}




// 2. custom array with modal objects

    override func viewDidLoad() {
        super.viewDidLoad()
        let arrTemp = NSArray()
        arrTemp = [1,2,3,4,5,6,7,8,9,10]
        for i in 0 ..< arrTemp.count{
            let eventModal = CustomModal()
            eventModal.is_selected = false
            eventModal.id = arrTemp[i] 
            arrData.add(eventModal)
        }
        tblView.reloadData()

    }

// 2.使用集合视图委托方法

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let modal = arrData[indexPath.row] as! CustomModal()
    modal.is_selected = true
    self.arrData.replaceObject(at: indexPath.row, with: modal)

    tblView.reloadData()
}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
    let modal = arrData[indexPath.row] as! CustomModal()
    modal.is_selected = false
    self.arrData.replaceObject(at: indexPath.row, with: modal)

    tblView.reloadData()
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! YourCellClass
    let modal = arrData[indexPath.row] as! CustomModal
    if modal.is_selected == true{
        cell.imgView.image = UIImage(named:"selected_image")
    }else{
        cell.imgView.image = UIImage(named:"deselected_image")
    }
}

答案 3 :(得分:0)

@Kishor,paintcode是第三方工具,你可以通过它来做到这一点。我也提供了链接。因为默认情况下你不具备此功能,所以你应该通过自定义行为来实现这一目标。谢谢。

答案 4 :(得分:0)

快捷键4

在ViewController中

// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "YourCollectionViewCellID", for: indexPath as IndexPath) as! YourCollectionViewCell
    cell.someImageView.image = imgArr[indexPath.item]
    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    print("You selected cell #\(indexPath.item)!")
    let cell = collectionView.cellForItem(at: indexPath) as? YourCollectionViewCell
    cell?.isSelected = true
    cell?.toggleSelected()    
}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

    let cell = collectionView.cellForItem(at: indexPath) as? YourCollectionViewCell
    cell?.isSelected = false
    cell?.toggleSelected()
}

在YourCollectionViewCell中

class YourCollectionViewCell: UICollectionViewCell {


    @IBOutlet weak var someImageView: UIImageView!
    @IBOutlet weak var checkImageView: UIImageView!

    //Function  for select and deselect checkmark.
    public func toggleSelected() {

        if (isSelected == false) {

            //Hide check mark image.
            self.checkImageView.image = UIImage(named: "unCheckImage")
            isSelected = true
        }else{

            //Show check mark image.
            self.checkImageView.image = UIImage(named: "CheckImage")
            isSelected = false
        }
    }    
}

希望享受!

答案 5 :(得分:0)

var selectedCellIndex:Int?
如果要在reloadData()之后显示选定的项,请

接受变量:它是先前选定的CellItem。 {受上述答案启发

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ColorCollectionCell", for: indexPath) as! ColorCollectionCell

        cell.isSelected = false

        if selectedCellIndex == indexPath.item {
            cell.checkMarkImgView.image = UIImage(named: "icn_checkMark")
        }else {
            cell.toggleSelected()
        }

        return cell
    }


    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let cell = collectionView.cellForItem(at: indexPath) as! ColorCollectionCell
        cell.isSelected = true
        selectedCellIndex = indexPath.item
        cell.toggleSelected()
}

在CollectionViewCell中,您可以使用此方法

class ColorCollectionCell: UICollectionViewCell {
    @IBOutlet weak var cellimgView: UIImageView!
    @IBOutlet weak var checkMarkImgView: UIImageView!

     func toggleSelected() {

        if (isSelected) {
            self.checkMarkImgView.image = UIImage(named: "icn_checkMark")
        }else{
            self.checkMarkImgView.image = UIImage(named: "")
// here you can use uncheck img here i am not using any image for not selected.
        }
    }   
}
相关问题