浏览代码

implement forward, info and delete context actions

cyberta 4 年之前
父节点
当前提交
ae5d69f4b4
共有 2 个文件被更改,包括 35 次插入6 次删除
  1. 20 1
      deltachat-ios/Chat/ChatViewControllerNew.swift
  2. 15 5
      deltachat-ios/Chat/Views/Cells/BaseMessageCell.swift

+ 20 - 1
deltachat-ios/Chat/ChatViewControllerNew.swift

@@ -927,7 +927,8 @@ class ChatViewControllerNew: UITableViewController {
 
     override func tableView(_ tableView: UITableView, performAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) {
         // handle standard actions here, but custom actions never trigger this. it still needs to be present for the menu to display, though.
-        if action == #selector(copy(_:)) {
+        switch action {
+        case #selector(copy(_:)):
             let id = messageIds[indexPath.row]
             let msg = DcMsg(id: id)
 
@@ -937,6 +938,24 @@ class ChatViewControllerNew: UITableViewController {
             } else {
                 pasteboard.string = msg.summary(chars: 10000000)
             }
+        case #selector(BaseMessageCell.messageInfo(_:)):
+            let msg = DcMsg(id: messageIds[indexPath.row])
+            logger.info("message: View info \(msg.messageId)")
+            let msgViewController = MessageInfoViewController(dcContext: dcContext, message: msg)
+            if let ctrl = navigationController {
+                ctrl.pushViewController(msgViewController, animated: true)
+            }
+        case #selector(BaseMessageCell.messageDelete(_:)):
+            let msg = DcMsg(id: messageIds[indexPath.row])
+            logger.info("message: delete \(msg.messageId)")
+            askToDeleteMessage(id: msg.id)
+
+        case #selector(BaseMessageCell.messageForward(_:)):
+            let msg = DcMsg(id: messageIds[indexPath.row])
+            RelayHelper.sharedInstance.setForwardMessage(messageId: msg.id)
+            navigationController?.popViewController(animated: true)
+        default:
+            break
         }
     }
 }

+ 15 - 5
deltachat-ios/Chat/Views/Cells/BaseMessageCell.swift

@@ -234,15 +234,25 @@ public class BaseMessageCell: UITableViewCell {
     }
 
     // MARK: - Context menu
-    @objc func messageInfo(sender: AnyObject?) {
-
+    @objc func messageInfo(_ sender: Any?) {
+        self.performAction(#selector(BaseMessageCell.messageInfo(_:)), with: sender)
     }
 
-    @objc func messageDelete(sender: AnyObject?) {
-
+    @objc func messageDelete(_ sender: Any?) {
+        self.performAction(#selector(BaseMessageCell.messageDelete(_:)), with: sender)
     }
 
-    @objc func messageForward(sender: AnyObject?) {
+    @objc func messageForward(_ sender: Any?) {
+        self.performAction(#selector(BaseMessageCell.messageForward(_:)), with: sender)
+    }
 
+    func performAction(_ action: Selector, with sender: Any?) {
+        if let tableView = self.superview as? UITableView, let indexPath = tableView.indexPath(for: self) {
+            // Trigger action in tableView delegate (UITableViewController)
+            tableView.delegate?.tableView?(tableView,
+                                           performAction: action,
+                                           forRowAt: indexPath,
+                                           withSender: sender)
+        }
     }
 }