From c30d491edc1f4b56a729992e52edf5828d8d7208 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Sun, 19 May 2019 04:05:44 +0530 Subject: [PATCH] iOS: Should be able to call showTunnelDetail multiple times And the detail views should not stack up. Signed-off-by: Roopesh Chander --- .../TunnelsListTableViewController.swift | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift index 8c40438..43f58df 100644 --- a/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/ViewController/TunnelsListTableViewController.swift @@ -255,21 +255,21 @@ class TunnelsListTableViewController: UIViewController { func showTunnelDetail(for tunnel: TunnelContainer, animated: Bool) { guard let tunnelsManager = tunnelsManager else { return } guard let splitViewController = splitViewController else { return } + guard let navController = navigationController else { return } if detailDisplayedTunnel != tunnel { let tunnelDetailVC = TunnelDetailTableViewController(tunnelsManager: tunnelsManager, tunnel: tunnel) let tunnelDetailNC = UINavigationController(rootViewController: tunnelDetailVC) tunnelDetailNC.restorationIdentifier = "DetailNC" - if animated { - splitViewController.showDetailViewController(tunnelDetailNC, sender: self) + if splitViewController.isCollapsed && navController.viewControllers.count > 1 { + navController.setViewControllers([self, tunnelDetailNC], animated: animated) } else { - UIView.performWithoutAnimation { - splitViewController.showDetailViewController(tunnelDetailNC, sender: self) - } + splitViewController.showDetailViewController(tunnelDetailNC, sender: self, animated: animated) } detailDisplayedTunnel = tunnel } + self.presentedViewController?.dismiss(animated: false, completion: nil) } } @@ -402,3 +402,15 @@ extension TunnelsListTableViewController: TunnelsManagerListDelegate { } } } + +extension UISplitViewController { + func showDetailViewController(_ vc: UIViewController, sender: Any?, animated: Bool) { + if animated { + showDetailViewController(vc, sender: sender) + } else { + UIView.performWithoutAnimation { + showDetailViewController(vc, sender: sender) + } + } + } +}