2016-05-10 5 views
1

Ich möchte die IsEditable-Eigenschaft in meinem HomeCollectionViewCell-Controller ändern, wenn ich meine HomeCollectionView lange drücke. Ich kann sie jedoch nur in der cellForItemAtIndexPath-Methode festlegen. Ich möchte sie in handleLongPress Methode setzen.Wie ändere ich die Eigenschaft in meiner UICollectionViewCell?

hier ist mein Eigentum in HomeCollectionViewCell

var isEditable:Bool = false { 
    didSet { 
     updateUI() 
    } 
} 

func updateUI(){ 
    videoImage.image! = videoInformation.featuredImage 
    videoImage.contentMode = .ScaleAspectFill 
    videoTitle.text! = videoInformation.title 
    if isEditable { 
     deleteButton.hidden = false 
    } else { 
     deleteButton.hidden = true 
    } 
} 

hier meine handleLongPress Methode ist:

func editVideoFiles(sender: UILongPressGestureRecognizer) { 
    if sender.state == UIGestureRecognizerState.Began{ 
     let p:CGPoint = sender.locationInView(self.collectionView) 
     let index: NSIndexPath = self.collectionView.indexPathForItemAtPoint(p)! 
     if let cell = self.collectionView.cellForItemAtIndexPath(index) { 
      //cell is the UICollectionViewCell, I do not know how to set the isEditable property by this. 
     } 
    } 
} 

Antwort

0

LÖSUNG:

func editVideoFiles(sender: UILongPressGestureRecognizer) { 
    if sender.state == UIGestureRecognizerState.Began{ 
     let p:CGPoint = sender.locationInView(self.collectionView) 
     let index: NSIndexPath = self.collectionView.indexPathForItemAtPoint(p)! 
     if let cell = self.collectionView.cellForItemAtIndexPath(index) as? HomeCollectionViewCell { 
      cell.isEditable = true. 
     } 
    } 
} 

WARUM ES FUNKTIONIERT:

Ihre isEditable Eigenschaft nur in Ihrer HomeCollectionViewCell Klasse vorhanden ist (weil Sie es in dort definiert).

Sie können auf eine Eigenschaft aus einer anderen Klasse zugreifen, indem Sie sie für eine Instanz dieser anderen Klasse aufrufen. Sie würden denken, class.property würde funktionieren (was sich hier beläuft auf: HomeCollectionViewCell.isEditable).

Aber Sie müssen die Eigenschaft auf dem INSTANCE einer Klasse aufrufen, was bedeutet, HomeCollectionViewCell.isEditable wird nicht funktionieren. Sie müssen zuerst eine Instanz der Klasse erstellen:

let cell: HomeCollectionViewCell

So können Sie tun:

cell.isEditable

Deshalb, indem Sie Ihre Casting cell (die ursprünglich als CollectionViewCell erstellt wird) als eine HomeCollectionViewCell, können Sie jetzt isEditable auf cell anrufen und tun:

cell.isEditable = true

+0

Danke! Aber ich möchte die Eigenschaft all meiner sichtbaren Zellen festlegen. Wenn ich für cell in collectionView.visibleCells() verwende, kann ich cell nicht in HomeCollectionViewCell umwandeln. Kannst du mir sagen, wie ich das machen soll? – leuction

+0

Ich habe dieses Problem gelöst, sagen Sie einfach für Zelle in (self.collectionView.visibleCells() als? [HomeCollectionViewCell])! – leuction

-1

Sie haben Zelle HomeCollectionViewCell zu werfen, dann werden Sie in der Lage sein, um Ihr Eigentum zu nutzen.

if let cell = self.collectionView.cellForItemAtIndexPath(index) as? HomeCollectionViewCell { 
    cell.isEditable = true; 
}