如何在 UITabBarViewController 中的 UINavigationController 中深度链接到从 UIViewController 访问的 UIViewController?

Posted

技术标签:

【中文标题】如何在 UITabBarViewController 中的 UINavigationController 中深度链接到从 UIViewController 访问的 UIViewController?【英文标题】:How to deeplink to a UIViewController accessed from a UIViewController in a UINavigationController in a UITabBarViewController? 【发布时间】:2017-04-04 16:43:22 【问题描述】:

我需要深度链接到一个 UIViewController,该 UIViewController 可以从另一个 UIViewController 访问,该 UIViewController 位于 UINavigationViewController 中,它本身是 UITableViewController 中的一个选项卡。

基本上是这样的

UITabBarViewController -> (每个标签) UINavigationController -> UIViewController -> (Press UIBarButtonItem) -> TheViewControllerIWant

由于我正在处理的项目的限制,这一切都是在我的 AppDelegate 中以编程方式创建的。我无法使用 Storyboards 来解决这个问题。

这是我现有的代码。它让我进入 ViewController,但没有让我导航回选项卡中的 ViewController

- (BOOL) application: (UIApplication * ) application openURL: (NSURL *) url sourceApplication: (NSString *) sourceApplication annotation: (id) annotation 

    if ([url.scheme isEqualToString: @"myApp"]) 

        if ([url.host isEqualToString: @"account"])
        
            self.window.rootViewController = [[EditAccountViewController alloc] init];
        

我也尝试过这个作为开始,但无法从 TabBar 中的一个向前导航到下一个 ViewController:

- (BOOL) application: (UIApplication * ) application openURL: (NSURL *) url sourceApplication: (NSString *) sourceApplication annotation: (id) annotation 

    if ([url.scheme isEqualToString: @"myApp"]) 

        if ([url.host isEqualToString: @"account"])
        
            [_tabBarController setSelectedIndex:0];
            self.window.rootViewController = _tabBarController;
        
    

我该如何做到这一点

【问题讨论】:

【参考方案1】:

那么你需要手动触发所有动作......

因此,您需要先选择 TabBarController 上的第一个选项卡 然后你需要获取第一个 Tab 的 UIViewController 并在 Navigation Controller 中推送目标 ViewController...

[_tabBarController setSelectedIndex:0];
UIViewController *myVC = self.tabBarController.viewControllers.firstObject;
UIViewController *destinationVC = [[UIViewController alloc] initWithNibName:@"vc.nib" bundle:[NSBundle mainBundle]];
[myVC.navigationController pushViewController:destinationVC animated:YES];

【讨论】:

如果是tabbar中的2nd 3rd etc对象,会有对应的.secondObject .thirdObject etc调用vcs吗? 如果我需要更深一层并在上述答案之后推动另一个 VC,我该怎么做? 如果你想让导航栈保持特定的顺序,你必须在下一次推送之后在栈上推送一个新的 viewController。如果您不关心堆栈,那么您可以初始化最终目标视图控制器并将其作为导航堆栈中的第一个 VC 推送。至于您的其他问题,self.tabBarController.viewControllersNSArray,因此您将引用其他 ViewController,例如 `[self.tabBarController.viewControllers objectAtIndex:2];' , 3 , 4 等等......

以上是关于如何在 UITabBarViewController 中的 UINavigationController 中深度链接到从 UIViewController 访问的 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?