我有一个UICollectionView,每个单元格都有一个UITextView。我想在TextView中长按文本并从上下文菜单中选择删除时,可以删除整个单元格。
我知道我可以通过覆盖
覆盖删除func delete(_ sender: Any?) {//I want to delete cell from here}
和
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(delete(_:))
{
return true
}
return super.canPerformAction(action, withSender: sender)
}
我只是不知道如何找到我当前的细胞。
答案 0 :(得分:0)
在您的func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
设置indexPath.row中作为UITextView的标记。然后在您的func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
或UITextView长按中,您可以访问UITextView的标签,这有助于查找当前的单元格。
您可以使用以下代码访问当前单元格:
let indexPath = IndexPath(row: textview.tag, section: 0)
let yourCell = self.collectionView.cellForItem(at: indexPath)
我希望这会对你有所帮助,或者你遇到任何其他问题,让我知道:)
答案 1 :(得分:0)
在将单元格添加到集合视图时,将标记赋予textfield,该文本字段应等于当前indexPath。当触发长按监听器时,检查标签值并根据该值进行操作。
答案 2 :(得分:0)
Swift 3解决方案: 所以有些人很接近,但每个人几乎把我带到了正确的道路上。解决方案并没有完全回答我的问题,但它可以与手势识别器结合使用来专门回答这个问题。
所以我的解决方案基于我的代码格式化方式,可能需要为其他人调整。
第一: 从UICollectionViewCell子类,当然我的textview实现,我覆盖了内置的删除功能。从那里创建了一个变量,它使用单元格superview进行实例化,这是一个UICollectionView。这允许我获取单元格的indexPath。从那里我还创建了一个变量,它使用UIView实例化我的UICollectionView所在的位置。从那里我在我的UIView中创建了一个函数,它接受一个IndexPath并删除该单元格。
在UICollectionViewCell内部:
subscribeOn
内部UIView:
override func delete(_ sender: Any?) {
let cv = self.superview as! UICollectionView
let indexPath = cv.indexPath(for: self)
let view = self.superview?.superview as! UIView
view.delCell(indexPath!)
}
答案 3 :(得分:-1)
func deleteSections(IndexSet) 删除指定索引处的部分。
func deleteItems(at:[IndexPath]) 删除指定索引路径的项目