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