鍍金池/ 問(wèn)答/C  iOS  網(wǎng)絡(luò)安全/ 外部URL調(diào)起App,再前往指定VC。已經(jīng)實(shí)現(xiàn)調(diào)起,問(wèn)題在前往指定VC。

外部URL調(diào)起App,再前往指定VC。已經(jīng)實(shí)現(xiàn)調(diào)起,問(wèn)題在前往指定VC。

提供一個(gè)案例:weixin://scanqrcode 微信掃一掃,用Safari打開,能成功調(diào)起微信并且打開掃一掃,之后不作掃描操作,能夠微信左上角的返回按鈕,返回微信“發(fā)現(xiàn)”。
我的思路是:
1.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 中,
我已經(jīng)能夠拿到url,比如myapp://id=10 ,拿到這id,我就可以push商品詳情頁(yè)VC,加載id=10的商品數(shù)據(jù)。
問(wèn)題來(lái)了:我push時(shí)失敗了,VC導(dǎo)航是在 ..didFinishLaunching..中代碼創(chuàng)建的。如果是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) {
        
        /** 跟服務(wù)端說(shuō)好,根據(jù)id 前往不同的場(chǎng)景 */
        /** shuyong://id=50 只需要后面數(shù)字 */
        
        NSString *str = [[url absoluteString] substringFromIndex:13];
        NSLog(@"%@",str);
        if ([str isEqualToString:@"90"]) {
            TargetVC *bvc = [TargetVC new];
            
            //獲取當(dāng)前根視圖VC
            UIWindow * window = [[UIApplication sharedApplication] keyWindow];
            UIViewController *result = window.rootViewController;
            
            //push
            [[[UINavigationController alloc]initWithRootViewController:result] pushViewController:bvc animated:YES];
        }
    }
    return NO;
}

請(qǐng)給我一些思路吧~~~

demo下載

回答
編輯回答
哎呦喂

'Pushing a navigation controller is not supported', UINavigationController 不能接受 push 進(jìn)來(lái)的對(duì)象是 UINavigationController,而你這個(gè) 'bvc' 應(yīng)該是個(gè) UINavigationController 的子類吧,把它改成 ViewController 就行了。(不知道你是不是想問(wèn)這個(gè))

2017年11月11日 11:07
編輯回答
好難瘦

如果 window.rootViewController 本身就是 UINavigationController 的話,那么很簡(jiǎn)單:

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

如果不是的話,那么:

UIWindow * window = [[UIApplication sharedApplication] keyWindow];
window.rootViewController = [UINavigationController alloc]initWithRootViewController: bvc];
2017年7月19日 15:45
編輯回答
久不遇

根據(jù) didFinishLaunchingWithOptions 里面的代碼, keyWindow.rootViewController 本身就是一個(gè) UINavigationController。是不是可以考慮,直接用 rootViewController 直接 push 就行?。

//獲取當(dāng)前根視圖VC
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
            
if ([window.rootViewController isKindOfClass:[UINavigationController class]]) {
    UINavigationController *result = (UINavigationController *)window.rootViewController;
    [result pushViewController:bvc animated:YES];
 }
2018年7月22日 15:14