美文网首页
知识点总结27:app加载网页

知识点总结27:app加载网页

作者: 枫之叶_小乙哥 | 来源:发表于2017-02-15 02:16 被阅读35次

    1.拿到当前控制器的导航控制器进行网页的跳转,可以转化为拿到当前窗口根控制器的选中的NavVC控制器来跳转

    
    - (void)squareBtnClick:(ZGKMeFooterviewButton *)button{
        
        ZGKLog(@"url -- %@", button.square.url);
    
        // 1.根据不同的协议进行处理(hasPrefix: && hasSuffix: && containsString:)
        if ([button.square.url hasPrefix:@"http"]) {// 利用webview加载
            ZGKLog(@"利用webview加载url")
            // 0.自定义webView
            ZGKWebViewController *webView = [[ZGKWebViewController alloc] init];
            // 将要跳转的url传递给webviewController
            webView.url = button.square.url;
            
            // 1.获得"我的"模块对应的导航控制器(通过多态,强制转化为父类,所以就不用子类ZGKTabBarController来接收对象)
            // 拿到窗口根控制器的2种方法:[UIApplication sharedApplication].keyWindow和self.window
            // 记得返回的对象不是UIViewController的时候,要强转
    //        UITabBarController *tabBarVC = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
            UITabBarController *tabBarVC = (UITabBarController *)self.window.rootViewController;
            //  打印结果:tabBarVC = ZGKTabBarController
            NSLog(@"tabBarVC = %@", [tabBarVC class]);
            UINavigationController *navVC = tabBarVC.selectedViewController;
          
            [navVC pushViewController:webView animated:YES];
        }else if ([button.square.url hasPrefix:@"mod"]){ // 另行处理
            ZGKLog(@"mod协议,内部处理")
            // mod协议内部如果包含不同的内容进行不同的处理
            if ([button.square.url containsString:@"BDJ_To_Check"]) {
                ZGKLog(@"跳转到[审帖]界面");
            }else if ([button.square.url containsString:@"BDJ_To_RecentHot"]){
                ZGKLog(@"跳转到[每日排行]界面");
            }
        }else{
            ZGKLog(@"不是http或者mod协议")
        }
    
    • 拿到当前窗口根控制器的方法有两种:[UIApplication sharedApplication].keyWindow和self.window, 记得返回的对象不是UIViewController的时候,要强转.
    • 拿到UITabBarVC当前选中的控制器,可以用selectedViewController属性
     // 1.获得"我的"模块对应的导航控制器(通过多态,强制转化为父类,所以就不用子类ZGKTabBarController来接收对象)
            // 拿到窗口根控制器的2种方法:[UIApplication sharedApplication].keyWindow和self.window
            // 记得返回的对象不是UIViewController的时候,要强转
    //        UITabBarController *tabBarVC = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
            UITabBarController *tabBarVC = (UITabBarController *)self.window.rootViewController;
            //  打印结果:tabBarVC = ZGKTabBarController
            NSLog(@"tabBarVC = %@", [tabBarVC class]);
            UINavigationController *navVC = tabBarVC.selectedViewController;
    
            [navVC pushViewController:webView animated:YES];
    

    2.自定义webView加载网页是没有进度条的,即使后续添加上去也不是加载的进度,要想有进度条就要用SFSafariViewController加载网页,并且要用 presentViewController:出该控制器

    
    #import <SafariServices/SafariServices.h>
    
    - (void)squareBtnClick:(ZGKMeFooterviewButton *)button{
        
        ZGKLog(@"url -- %@", button.square.url);
    
        // 1.根据不同的协议进行处理(hasPrefix: && hasSuffix: && containsString:)
        if ([button.square.url hasPrefix:@"http"]) {// 利用webview加载
            ZGKLog(@"利用webview加载url")
            // 0.自定义webView
    //        ZGKWebViewController *webView = [[ZGKWebViewController alloc] init];
    //        webView.url = button.square.url;
            
            // 1.获得"我的"模块对应的导航控制器(通过多态,强制转化为父类,所以就不用子类ZGKTabBarController来接收对象)
            // 拿到窗口根控制器的2种方法:[UIApplication sharedApplication].keyWindow和self.window
            // 记得返回的对象不是UIViewController的时候,要强转
    //        UITabBarController *tabBarVC = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
            UITabBarController *tabBarVC = (UITabBarController *)self.window.rootViewController;
            //  打印结果:tabBarVC = ZGKTabBarController
            NSLog(@"tabBarVC = %@", [tabBarVC class]);
    //        UINavigationController *navVC = tabBarVC.selectedViewController;
          
            
            SFSafariViewController *webView = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:button.square.url]];
    //       如果是push出来的SFSafariViewController,则进度条会被导航栏挡住
    //        [navVC pushViewController:webView animated:YES];
            [tabBarVC presentViewController:webView animated:YES completion:nil];
        }
    

    总结:

    • 1.使用 SFSafariViewController要导入#import <SafariServices/SafariServices.h>

    • 2.要看到进度条,只能presentViewCotroller,不能是pushViewController

    相关文章

      网友评论

          本文标题:知识点总结27:app加载网页

          本文链接:https://www.haomeiwen.com/subject/xhviittx.html