gpt4 book ai didi

ios - 如何从类属性(特别是 UIButton)访问父类实例?

转载 作者:行者123 更新时间:2023-11-28 08:29:00 25 4
gpt4 key购买 nike

我有一个聊天气泡按钮,它调用一个菜单来将文本或图像复制到粘贴板。当我处理长按和双击时,我可以访问按钮本身,但是我需要能够访问包含在聊天气泡按钮旁边的单元格实例中的消息属性。

我的目标是使用从操作函数传递的 cell.chatBubble 引用来检索对单元格的引用,以便访问 message 数据。

func selfMessageCellForRowAtIndexPath(indexPath: NSIndexPath) -> SelfMessageCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier(SelfMessageCellIdentifier) as! SelfMessageCell

let message = self.messages[indexPath.row]

cell.messageLabel.text = message.messageContents
let messageWidth = cell.messageLabel.intrinsicContentSize().width
if messageWidth < (cell.bounds.width * 0.7 - 42) {
cell.chatWidth = messageWidth + 33
}

cell.chatBubble.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(handleCopyGesture(_:))))

cell.chatBubble.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(handleCopyGesture(_:))))
let tap = UITapGestureRecognizer(target: self, action: #selector(handleCopyGesture(_:)))
tap.numberOfTapsRequired = 2
cell.chatBubble.addGestureRecognizer(tap)

cell.transform = self.tableView.transform

return cell
}


// Extension for chat bubble press handling
extension MessageSuperViewController {
func handleCopyGesture(recognizer: UIGestureRecognizer) {
if recognizer.state == UIGestureRecognizerState.Began {
openCopyMenu(recognizer)
}
else if !UIMenuController.sharedMenuController().menuVisible{
openCopyMenu(recognizer)
}
}

func openCopyMenu(recognizer: UIGestureRecognizer) {
if let recognizerView = recognizer.view, recognizerSuperView = recognizer.view?.superview {
let menuController = UIMenuController.sharedMenuController()
let copyItem = UIMenuItem(title: "Copy", action: #selector(copyMessageContents(_:)))
let moreItem = UIMenuItem(title: "More..", action: #selector(moreMenuItem(_:)))
menuController.menuItems = [copyItem,moreItem]
menuController.setTargetRect(recognizerView.frame, inView: recognizerSuperView)
menuController.setMenuVisible(true, animated: true)
recognizerView.becomeFirstResponder()
}
}

func copyMessageContents(sender: UIMenuItem) {

}

func moreMenuItem(sender: UIMenuItem) {

}

最佳答案

我建议在 SelfMessageCell 中添加 UITapGestureRecognizer,当您触发事件时,您可以使用如下委托(delegate):

SelfMessageCellDidTapDelegate(sender: SelfMessageCell)

并且在您拥有 selfMessageCellForRowAtIndexPath 的此类中,您实现了此委托(delegate),sender 将包含您想要的数据。

func selfMessageCellForRowAtIndexPath(indexPath: NSIndexPath) -> SelfMessageCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier(SelfMessageCellIdentifier) as! SelfMessageCell
cell.delegate = self
....
}

SelfMessageCellDidTapDelegate(sender: SelfMessageCell) {
print(sender)
}

关于ios - 如何从类属性(特别是 UIButton)访问父类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39300155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com