如何显示特定的VC,更像是导航到一堆VC

时间:2018-03-01 13:30:36

标签: ios swift swift3 uinavigationcontroller ios-universal-links

所以我在我的应用程序中实现了通用链接,当按下按钮时,我打开了第二个应用程序:

  

UIApplication.shared.open(aUrl!)

我也接到了电话:

  

func application(_ application:UIApplication,continue userActivity:NSUserActivity,restorationHandler:@escaping([Any]?) - > Void) - > Bool {}

这是一个警报。

问题就像标题所说的那样......我可以导航到一个特定的VC,(从FirstApp到我用通用链接打开它的第二个),更像是映射*ngIf="userService.currentUser.type_id == 1"

我写了类似的话:

navigation controller stack

但这是一个丑陋的表现形式,我需要类似洞穴导航堆栈......

而且,如果我想通过通用链接处理更多内容,我可以为此制作一个帮助类吗?任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

好吧所以这不是一个环球链接问题,而是更多的导航偏好。当您在continueUserActivity函数中传递通用链接时,您应该对其进行解析并相应地从您的应用代表进行导航。您应该将您的通用链接处理切换到Branch,因为它们将免费为您处理此问题,并且它们通过回调而不是链接参数传递元数据,这将使您的链接更加强大。反正...

以UINavigationViewController

开头

这包括rootViewController,它应该是您主页的一个实例。将此导航视图控制器存储为实例变量,以便您的应用程序仅在启动时处理一个导航视图控制器。如果您正在使用故事板,那么您只需获得对该导航视图控制器的引用:

self.nav = self.window?.rootViewController as? UINavigationViewController

推送vs将视图控制器呈现在导航

当您收到链接并确定需要将该用户带到新页面时,您应决定是推送还是呈现VC。

如果您希望将该视图作为堆栈的一部分进行维护,则必须进行推送。例如,如果您想向用户显示一双鞋子,您可能希望将它们带入鞋子类别,然后将它们与鞋子细节控制器一起展示。在这种情况下,您可以将用户带到主页并将正确的导航堆栈推送到UINavigationViewController上。

self.nav.popToRootViewController(animated: true)

self.nav.pushViewController(firstController, animated: true)

self.nav.pushViewController(secondViewController, animated: true)

这样您的用户UINavigationController堆栈将看起来像 root> firstVC> secondVC ,他们将面包屑能够在流动中穿过。

呈现

如果您不想将视图推入堆栈。也许你想要提供一个弹出窗口,无论他们在应用程序中的位置,你不想搞砸他们的位置,你应该使用现在的VC。这将简单地在整个NavigationController上呈现一个ViewController,而不会被添加到NavigationController的堆栈中。

self.nav.presentViewController(modalVC, animated:true, completion: nil)

modalVC内,您可以致电

self.dismiss(animated: true, completion: nil)

答案 1 :(得分:1)

您需要使用.viewControllers的{​​{1}}属性,您可以使用UINavigationController方法执行此操作,或直接修改setViewControllers(_:animated:)属性.viewControllers将是rootViewControllerviewControllersArray[0]将为topViewController

此属性说明和详细信息可以在viewControllersArray[count-1]文档

中找到
UINavigationController
  

属性

     

当前在导航堆栈上的视图控制器。

<强>声明 SWIFT

viewControllers
  

讨论根视图控制器位于数组中的索引0处,后视图控制器位于索引n-2处,顶层控制器位于   index n-1,其中n是数组中的项数。

     

为此属性分配新的视图控制器数组是   相当于调用setViewControllers:animated:方法   动画参数设置为false。

示例

var viewControllers: [UIViewController]