获取我正在触摸的文本视图在哪个 UIcollectionviewcell
Posted
技术标签:
【中文标题】获取我正在触摸的文本视图在哪个 UIcollectionviewcell【英文标题】:Getting which UIcollectionviewcell the textview im touching is in 【发布时间】:2017-01-24 08:02:23 【问题描述】:我有一个 UICollectionView,每个单元格都有一个 UITextView。我试图在长按 TextView 中的文本并从上下文菜单中选择删除时删除整个单元格。
我知道我可以通过覆盖来覆盖 Delete
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)
我只是不知道如何找到我所在的当前单元格。
【问题讨论】:
您可以使用 indexPath.row 为 UITextView 分配标签,并通过此标签获取单元格。 但是我怎么知道上下文菜单在哪个文本视图中呢? 在cellForItemAtIndexPath
中,设置cell.textView.tag = indexPath.row
。在函数delete(_ sender: Any?) let textView: UITextView = sender as! UITextView; indexPath.row = textView.tag . Just call delete collectionCell method
这里的问题是发送者是一个UIMenuController,而不是UITextView
【参考方案1】:
在您的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)
希望对您有所帮助,或者您遇到任何其他问题,请告诉我:)
【讨论】:
【参考方案2】:在将单元格添加到集合视图时,为文本字段提供标签,该标签应等于当前 indexPath。当长按监听器被触发时,检查标签值,并据此进行操作。
【讨论】:
【参考方案3】:Swift 3 解决方案: 所以有些人很接近,但每个人都几乎把我引到了正确的道路上。该解决方案并不能完全回答我的问题,但可以结合手势识别器来具体回答问题。
所以我的解决方案基于我的代码格式,可能需要针对其他人进行调整。
首先: 从 UICollectionViewCell 子类中,当然我的 textview 是在其中实现的,我覆盖了内置的删除功能。从那里创建了一个变量,该变量使用单元格超级视图进行实例化,即 UICollectionView。这使我可以获取单元格的 indexPath。从那里我还创建了一个变量,该变量使用 UIView 实例化,用于我的 UICollectionView 所在的位置。从那里我在我的 UIView 中创建了一个函数,它接受一个 IndexPath 并删除单元格。
UICollectionViewCell 内部:
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!)
UIView 内部:
func delCell(indexPath: IndexPath) /*code for cell removal here*/
【讨论】:
【参考方案4】:func deleteSections(IndexSet) 删除指定索引处的节。
func deleteItems(at: [IndexPath]) 删除指定索引路径的项目
【讨论】:
但是如何获取 indexPath。我正在尝试从 override func delete(_ sender: Any?) 您的发件人是您的索引路径。 [indexPath.row] 这里的发送者是一个 UIMenuController @EdricChen 对不起,我很困惑。您不是在问如何确定 self 以便可以将该消息发送到 UIMenuController 以处理诸如删除之类的事件吗? 我正在尝试覆盖内置的上下文菜单按钮删除,该菜单在 uitextview 中选择文本后打开,并获取我在其中打开该上下文菜单的单元格。以上是关于获取我正在触摸的文本视图在哪个 UIcollectionviewcell的主要内容,如果未能解决你的问题,请参考以下文章