2016-03-23 11 views
3

In der Tabellenansicht können Sie Häkchen auf Zellen setzen.So zeigen Sie das Kontrollkästchen Häkchen in der Sammlungsansicht (Bilder) an

Aber in Collection View, wie können wir ein Häkchen setzen, wenn wir eine Zelle (Bild) auswählen?

Ich habe gerade eine Bildansicht innerhalb der Zelle und der Bildansicht gemacht und ein Häkchen gesetzt. Mein Code ist unten.

Aber es funktioniert nicht.

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") 
    } 
} 
+0

http://stackoverflow.com/questions/18977527/how-do-i-display-the-standard-checkmark-on-a-uicollectionviewcell – Ujjwal

+1

Kurze Antwort Sie können nicht, Sie erstellen entweder Ihre benutzerdefinierte Zelle, oder versuchen Sie es finden eine dritte Zelle irgendwo im Internet –

+0

Ok Danke @ sken3r.MI – kishor

Antwort

0

@Kishor, Paintcode ist das Tool von Drittanbietern, mit dem Sie das tun können. Ich habe den Link auch angegeben. Da diese Funktion standardmäßig nicht zur Verfügung steht, sollten Sie Ihr benutzerdefiniertes Verhalten dazu nutzen, dies zu erreichen. Vielen Dank.

+0

Aber wie können wir es in Grid View setzen? Wir erstellen nur Check Mark Richtig? Danke – kishor

1

Ich sehe zwei Hauptprobleme mit diesem Code:

  1. Sie verwenden dequeueReusableCellWithReuseIdentifier Methode, die verschiedene Zelle aus der Sammlung Ansicht Cache erhält, nicht der auf dem Bildschirm. Verwenden Sie stattdessen die Methode cellForItemAtIndexPath der Sammlungsansicht.
  2. Sie versuchen, den Zellenstatus (ausgewählt/nicht ausgewählt) in der Zelle selbst zu speichern. Es ist ein häufiger Fehler bei der Arbeit mit UITableView/UICollectionView und dieser Ansatz wird nicht funktionieren. Behalten Sie den Status stattdessen an einem anderen Ort (z. B. im Wörterbuch) und , um die Wiederherstellung jedes Mal, wenn die Sammlungsansicht Ihre Datenquelle cellForItemAtIndexPath Methode aufruft.
+0

Ja werde ich versuchen. Also muss ich CellForItemAtIndexPath Methode verwenden? Danke – kishor

3

// Delegatmethode 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 
} 

Und in pickSomeGridViewController zeigen Häkchen Bild ausgewählt ist oder nicht.

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

var arrData = NSMutableArray() // 1.Make ein ModalClass.swift und NSArray mit modalen Klasse Objekte wie dieses

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. Verwenden Sammlung Ansicht Delegatmethode

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") 
    } 
} 
Verwandte Themen