Ich habe eine UICollectionView mit Zellen aus meiner AssignmentManager-Klasse gefüllt. Wenn der Benutzer eine Zuweisung löschen möchte, hält er eine Zelle gedrückt und hält sie gedrückt, um eine Löschschaltfläche in der Zelle anzuzeigen, auf die sie geklickt haben. Mit dem folgenden Code erscheint die Lösch-Schaltfläche in jeder einzelnen Zelle, wenn der Benutzer auf einen klickt. Wie kann ich das mit UIGestureRecognizer beheben? Was kann ich tun, um die einzelne Zelle anzugeben, die der Benutzer in meinem Code drückt und hält? Jede Hilfe wäre willkommen.Swift: Machen UIGestureRecognizer nur eine UICollectionViewCell statt alle
* Einige Dinge zu beachten: Ich habe nur den Code unten, dass ich denke, ist relevant für die Frage. Ich kann mehr hinzufügen, wenn nötig. Auch ja, ich habe deleteButton als delteButton falsch geschrieben. Es tut mir leid, wenn das jemanden verwirrt.
var userWantsToRemoveDeleteButton: Bool = false
var userDelete: Bool = false
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! homeworkcell
cell.delteButton.hidden = true
cell.delteButton.enabled = false
if userDelete == true {
cell.delteButton.hidden = false
cell.delteButton.enabled = true
if userWantsToRemoveDeleteButton == true {
cell.delteButton.hidden = true
cell.delteButton.enabled = false
}
}
// add button gestures
cell.delteButton?.layer.setValue(indexPath.item, forKey: "index")
cell.delteButton?.addTarget(self, action: "deleteAssignment:", forControlEvents: UIControlEvents.TouchUpInside)
// add the swipe gestures
let longPress = UILongPressGestureRecognizer(target: self, action: "deleteMode:")
cell.addGestureRecognizer(longPress)
let assignments = AssignmentManager.assignments[indexPath.item]
cell.myLabel.text = assignments.title
cell.assignment = assignments
cell.dueLabel.text = dateString
cell.myLabel.textColor = UIColor.whiteColor()
cell.backgroundColor = UIColor.blueColor()
cell.layer.borderColor = UIColor.blackColor().CGColor
cell.layer.borderWidth = 1
cell.layer.cornerRadius = 8
return cell
}
func deleteMode(sender: UISwipeGestureRecognizer) {
userDelete = true
userWantsToRemoveDeleteButton = false
collectionView.reloadData()
doneEditingButton.enabled = true
}
func deleteAssignment(sender: UIButton) {
let i : Int = (sender.layer.valueForKey("index")) as! Int
AssignmentManager.deleteAssignment(i)
NSUserDefaultsManager.synchronize()
collectionView.reloadData()
}
also würde ich ein Tag in die Zelle in meinem deleteMode-Funktion oder in der cellForRow-Methode hinzufügen? – videoperson
in 'cellForRow' – tbilopavlovic