【问题标题】:Swift: Make UIGestureRecognizer affect only one UICollectionViewCell instead of allSwift:使 UIGestureRecognizer 只影响一个 UICollectionViewCell 而不是全部
【发布时间】:2016-06-05 21:58:29
【问题描述】:

我有一个 UICollectionView,其中包含从我的 AssignmentManager 类填充的单元格。当用户想要删除分配时,他们按住一个单元格,以便删除按钮出现在他们单击的单元格上。使用下面的代码,当用户单击一个单元格时,删除按钮会出现在每个单元格上。如何使用 UIGestureRecognizer 解决此问题?我该怎么做才能指定用户在我的代码中按住并按住的单个单元格?任何帮助将不胜感激。

*需要注意的事项:我只包含了我认为与问题相关的以下代码。如果需要,我可以添加更多。也是的,我确实将 deleteButton 拼错为 delteButton。如果这让任何人感到困惑,我很抱歉。

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

【问题讨论】:

    标签: ios swift uibutton uigesturerecognizer uicollectionviewcell


    【解决方案1】:

    嗯,这是因为 userDelete 变为真,然后按钮显示在每个单元格中。您应该记住用户按下了哪个单元格。所以可能会在单元格中添加标签(indexPath.row),然后在 deleteMode 函数中调用 reload 方法。然后在 cellForRow 方法中检查selectedTag 是否等于 indexPath.row,如果是则显示按钮,否则隐藏它。 这只是一个简单的示例,您可以如何做到这一点....

    【讨论】:

    • 那么我会在 deleteMode 函数或 cellForRow 方法中向单元格添加标签吗?
    猜你喜欢
    • 2019-09-18
    • 2017-01-21
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2018-12-23
    • 2021-07-22
    相关资源
    最近更新 更多