Swift:使 UIGestureRecognizer 只影响一个 UICollectionViewCell 而不是全部
Posted
技术标签:
【中文标题】Swift:使 UIGestureRecognizer 只影响一个 UICollectionViewCell 而不是全部【英文标题】:Swift: Make UIGestureRecognizer affect only one UICollectionViewCell instead of all 【发布时间】: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()
【问题讨论】:
【参考方案1】:嗯,这是因为 userDelete 变为真,然后按钮显示在每个单元格中。您应该记住用户按下了哪个单元格。所以可能会在单元格中添加标签(indexPath.row),然后在 deleteMode 函数中调用 reload 方法。然后在 cellForRow 方法中检查selectedTag
是否等于 indexPath.row,如果是则显示按钮,否则隐藏它。
这只是一个简单的示例,您可以如何做到这一点....
【讨论】:
那么我会在 deleteMode 函数或 cellForRow 方法中向单元格添加标签吗?以上是关于Swift:使 UIGestureRecognizer 只影响一个 UICollectionViewCell 而不是全部的主要内容,如果未能解决你的问题,请参考以下文章
你如何使情节提要上的 UIImageView 可点击(swift)
如何使屏幕仅垂直。 (UITabBarController/Swift)