1

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() 
    } 

Antwort

0

Nun, das passiert, weil userDelete wahr wird und dann die Schaltfläche in jeder Zelle angezeigt wird. Sie sollten sich daran erinnern, welche Zelle Benutzer gedrückt hat. Also vielleicht Tag zu der Zelle hinzufügen (indexPath.row), und dann in deleteMode Funktion Aufruf Reload-Methode. Dann prüfen Sie in der cellForRow-Methode, ob selectedTag gleich dem indexPath.row ist, und zeigen Sie die Schaltfläche an, falls dies der Fall ist, andernfalls verbergen Sie sie. Dies ist nur ein kurzes Beispiel, wie Sie es tun können ....

+0

also würde ich ein Tag in die Zelle in meinem deleteMode-Funktion oder in der cellForRow-Methode hinzufügen? – videoperson

+0

in 'cellForRow' – tbilopavlovic

Verwandte Themen