外部URL调起App,再前往指定VC。已经实现调起,问题在前往指定VC。

发布于 2022-09-06 12:03:36 字数 1603 浏览 16 评论 0

提供一个案例:weixin://scanqrcode 微信扫一扫,用Safari打开,能成功调起微信并且打开扫一扫,之后不作扫描操作,能够微信左上角的返回按钮,返回微信“发现”。
我的思路是:
1.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 中,
我已经能够拿到url,比如myapp://id=10 ,拿到这id,我就可以push商品详情页VC,加载id=10的商品数据。
问题来了:我push时失败了,VC导航是在 ..didFinishLaunching..中代码创建的。如果是present是可以成功前往指定wVC的。

clipboard.png

代码:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    /** 如果url以 shuyong 开头 */
    BOOL isOrNot = [[url absoluteString] hasPrefix:@"shuyong://"];
    
    if (isOrNot) {
        
        /** 跟服务端说好,根据id 前往不同的场景 */
        /** shuyong://id=50 只需要后面数字 */
        
        NSString *str = [[url absoluteString] substringFromIndex:13];
        NSLog(@"%@",str);
        if ([str isEqualToString:@"90"]) {
            TargetVC *bvc = [TargetVC new];
            
            //获取当前根视图VC
            UIWindow * window = [[UIApplication sharedApplication] keyWindow];
            UIViewController *result = window.rootViewController;
            
            //push
            [[[UINavigationController alloc]initWithRootViewController:result] pushViewController:bvc animated:YES];
        }
    }
    return NO;
}

请给我一些思路吧~~~

demo下载

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

游魂 2022-09-13 12:03:37

如果 window.rootViewController 本身就是 UINavigationController 的话,那么很简单:

UINavigationController *rootVC = (UINavigationController*)window.rootViewController;
[rootVC pushViewController:bvc animated:YES];

如果不是的话,那么:

UIWindow * window = [[UIApplication sharedApplication] keyWindow];
window.rootViewController = [UINavigationController alloc]initWithRootViewController: bvc];
森罗 2022-09-13 12:03:37

根据 didFinishLaunchingWithOptions 里面的代码, keyWindow.rootViewController 本身就是一个 UINavigationController。是不是可以考虑,直接用 rootViewController 直接 push 就行?。

//获取当前根视图VC
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
            
if ([window.rootViewController isKindOfClass:[UINavigationController class]]) {
    UINavigationController *result = (UINavigationController *)window.rootViewController;
    [result pushViewController:bvc animated:YES];
 }
寄意 2022-09-13 12:03:36

'Pushing a navigation controller is not supported', UINavigationController 不能接受 push 进来的对象是 UINavigationController,而你这个 'bvc' 应该是个 UINavigationController 的子类吧,把它改成 ViewController 就行了。(不知道你是不是想问这个)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文