私はテキストまたはイメージをペーストボードにコピーするためのメニューを呼び出すチャットバブルボタンを持っています。長いプレスとダブルタップを処理すると、ボタン自体にアクセスできますが、チャットバブルボタンの横にあるセルインスタンスに含まれているメッセージ属性にアクセスできる必要があります。クラス属性、特にUIButtonから親クラスインスタンスにアクセスするにはどうすればよいですか?
私は、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) {
}
あなたの 'handleCopyGesture(_ :)'メソッドを表示できますか? – keithbhunter
これは大したことではありませんが、文章や画像付きのメッセージには条件文が必要です – ggworean