iOS加载网页的方式-4种

①Safari openURL

自带很多功能(进度条,刷新,前进,倒退等等功能),必须要跳出当前应用

②UIWebView

UIWebView (没有功能) ,在当前应用打开网页,并且有safari,自己实现,UIWebView不能实现进度条

③WKWebView

WKWebView:iOS8 (UIWebView升级版本,添加功能 1.监听进度 2.缓存)

 1.导入

#import <WebKit/WebKit.h>

代码:

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface XBWebViewController : UIViewController
/** 链接URL */
@property (nonatomic, strong) NSURL * url ;
@end

NS_ASSUME_NONNULL_END
#import "XBWebViewController.h"
#import <WebKit/WebKit.h>
@interface XBWebViewController ()
@property (weak, nonatomic) IBOutlet UIView *contentView;
/** WKWebView */
@property (nonatomic, strong) WKWebView * webView ;
/** 返回按钮 */
@property (weak, nonatomic) IBOutlet UIBarButtonItem *backItem;
/** 向前按钮 */
@property (weak, nonatomic) IBOutlet UIBarButtonItem *forwardItem;
/** 进度条 */
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;

@end

@implementation XBWebViewController
- (IBAction)goBack:(id)sender {
    [self.webView goBack];
}
- (IBAction)goForward:(id)sender {
    [self.webView goForward];
}
- (IBAction)reload:(id)sender {
    [self.webView reload];
}

#pragma mark - 生命周期方法
- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    _webView.frame = self.contentView.bounds;
}

-(void)awakeFromNib {
    [super awakeFromNib];
    self.backItem.image = [self.backItem.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.forwardItem.image = [UIImage noRenderingImageName:@"Yellow_3D_arrow_right"];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupUI];
}
- (void)setupUI {
    // 添加webView
    WKWebView *webView = [[WKWebView alloc] init];
    _webView = webView;
    [self.contentView addSubview:webView];
    
    // 展示网页
    NSURLRequest *request = [NSURLRequest requestWithURL:_url];
    [webView loadRequest:request];
    
    // KVO监听属性改变
    /*
     Observer:观察者
     KeyPath:观察webView哪个属性
     options:NSKeyValueObservingOptionNew:观察新值改变
     KVO注意点.一定要记得移除
     */
    [webView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil];
    [webView addObserver:self forKeyPath:@"canGoForward" options:NSKeyValueObservingOptionNew context:nil];
    [webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];
    
    // 进度条
    [webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
}
// 只要观察对象属性有新值就会调用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
    self.backItem.enabled = self.webView.canGoBack;
    self.forwardItem.enabled = self.webView.canGoForward;
    self.title = self.webView.title;
    self.progressView.progress = self.webView.estimatedProgress;
    self.progressView.hidden = self.webView.estimatedProgress >= 1;
}

#pragma mark - 对象被销毁
- (void)dealloc
{
    [self.webView removeObserver:self forKeyPath:@"canGoBack"];
    [self.webView removeObserver:self forKeyPath:@"title"];
    [self.webView removeObserver:self forKeyPath:@"canGoForward"];
    [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
}

@end

 

④Safari浏览器(SFSafariViewController)

SFSafariViewController:专门用来展示网页 需求:即想要在当前应用展示网页,又想要safari功能 iOS9才能使用

 1.导入#import <SafariServices/SafariServices.h>

#import <SafariServices/SafariServices.h>
@interface UIViewController ()<SFSafariViewControllerDelegate>
@end

// SFSafariViewController使用Modal(使用Present方式模态跳转)
SFSafariViewController *safariVc = [[SFSafariViewController alloc] initWithURL:url];
//safariVc.delegate = self;
//self.navigationController.navigationBarHidden = YES;
//[self.navigationController pushViewController:safariVc animated:YES];
[self presentViewController:safariVc animated:YES completion:nil];
#pragma mark - SFSafariViewControllerDelegate
- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller
{
    [self.navigationController popViewControllerAnimated:YES];
}

 

 

 

posted @ 2018-12-06 09:27  淡然微笑_Steven  阅读(1526)  评论(0编辑  收藏  举报