Parcourir la source

found solution - PreviewController needs to be presented inside NavigationContrller

nayooti il y a 5 ans
Parent
commit
944904d874

+ 1 - 3
deltachat-ios/Controller/ChatViewController.swift

@@ -65,7 +65,6 @@ class ChatViewController: MessagesViewController {
     private var showNamesAboveMessage: Bool
     var showCustomNavBar = true
     var previewView: UIView?
-    var previewController: PreviewController?
 
     var emptyStateView: PaddingLabel = {
         let view =  PaddingLabel()
@@ -1154,8 +1153,7 @@ extension ChatViewController: MessageCellDelegate {
 
                 // these are the files user will be able to swipe trough
                 let mediaUrls: [URL] = previousUrls + [url] + nextUrls
-                previewController = PreviewController(currentIndex: previousUrls.count, urls: mediaUrls)
-                present(previewController!.qlController, animated: true)
+                coordinator?.showMediaGallery(currentIndex: previousUrls.count, mediaUrls: mediaUrls)
             }
         }
     }

+ 42 - 0
deltachat-ios/Controller/PreviewController.swift

@@ -20,3 +20,45 @@ class PreviewController: QLPreviewControllerDataSource {
         return urls[index] as QLPreviewItem
     }
 }
+
+class BetterPreviewController: QLPreviewController {
+
+    var urls: [URL]
+
+    private lazy var doneButtonItem: UIBarButtonItem = {
+        let button = UIBarButtonItem(title: "Fertig", style: .done, target: self, action: #selector(doneButtonPressed(_:)))
+        return button
+    }()
+
+    init(currentIndex: Int, urls: [URL]) {
+        self.urls = urls
+        super.init(nibName: nil, bundle: nil)
+        dataSource = self
+        currentPreviewItemIndex = currentIndex
+    }
+
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        navigationItem.leftBarButtonItem = doneButtonItem
+    }
+
+    // MARK: - actions
+    @objc private func doneButtonPressed(_ sender: UIBarButtonItem) {
+        self.dismiss(animated: true, completion: nil)
+    }
+}
+
+extension BetterPreviewController: QLPreviewControllerDataSource {
+
+    func numberOfPreviewItems(in _: QLPreviewController) -> Int {
+        return urls.count
+    }
+
+    func previewController(_: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
+        return urls[index] as QLPreviewItem
+    }
+}

+ 7 - 0
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -523,6 +523,13 @@ class ChatViewCoordinator: NSObject, Coordinator {
     func showPhotoVideoLibrary(delegate: MediaPickerDelegate) {
         mediaPicker.showPhotoVideoLibrary(delegate: delegate)
     }
+
+    func showMediaGallery(currentIndex: Int, mediaUrls urls: [URL]) {
+        let betterPreviewController = BetterPreviewController(currentIndex: currentIndex, urls: urls)
+        let nav = UINavigationController(rootViewController: betterPreviewController)
+
+        navigationController.present(nav, animated: true)
+    }
 }
 
 class NewGroupAddMembersCoordinator: Coordinator {

+ 1 - 1
deltachat-ios/libraries/deltachat-core-rust

@@ -1 +1 @@
-Subproject commit 5f47810964f5ed2b78d84f0c6140e1f80daa47e9
+Subproject commit e94c62e5b35fef3e2afa868db121bbfe2608ee5a