所以我在我的应用程序中实现了通用链接,当按下按钮时,我打开了第二个应用程序:
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
但这是一个丑陋的表现形式,我需要类似洞穴导航堆栈......
而且,如果我想通过通用链接处理更多内容,我可以为此制作一个帮助类吗?任何建议都表示赞赏。
答案 0 :(得分:1)
好吧所以这不是一个环球链接问题,而是更多的导航偏好。当您在continueUserActivity
函数中传递通用链接时,您应该对其进行解析并相应地从您的应用代表进行导航。您应该将您的通用链接处理切换到Branch,因为它们将免费为您处理此问题,并且它们通过回调而不是链接参数传递元数据,这将使您的链接更加强大。反正...
这包括rootViewController
,它应该是您主页的一个实例。将此导航视图控制器存储为实例变量,以便您的应用程序仅在启动时处理一个导航视图控制器。如果您正在使用故事板,那么您只需获得对该导航视图控制器的引用:
self.nav = self.window?.rootViewController as? UINavigationViewController
当您收到链接并确定需要将该用户带到新页面时,您应决定是推送还是呈现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
将是rootViewController
和viewControllersArray[0]
将为topViewController
此属性说明和详细信息可以在viewControllersArray[count-1]
文档
UINavigationController
属性
当前在导航堆栈上的视图控制器。
<强>声明强> 的 SWIFT 强>
viewControllers
讨论根视图控制器位于数组中的索引0处,后视图控制器位于索引n-2处,顶层控制器位于 index n-1,其中n是数组中的项数。
为此属性分配新的视图控制器数组是 相当于调用setViewControllers:animated:方法 动画参数设置为false。
示例强>
var viewControllers: [UIViewController]