UIWebView-->iOS進行混合開發的橋樑,在iOS開發中常用於加載網頁和html文件
現在對於混合式(傳統模式與PC網頁端相結合)移動端開發(開發成本低、速度快)越來越流行。在Android開發中有WebView作爲混合模式開發的橋樑,在iOS中也同樣有一個 UIWebView 組件來作爲混合模式開發的橋樑。
1.初始化[繼承自UIView]
繼承自UIView,所以初始化方法類似UIView
eg:
UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.frame];
[self.view addSubview:webView];
2.加載數據[三種]
第一種:
- (void)loadRequest:(NSURLRequest *)request;
[webView loadRequest:[NSURLRequest requestWithURL:[NSUR URLWithString:@"http://www.baidu.com"]]];
這是加載網頁最常用的方式,通過一個網頁的url來進行加載,這個url可以是遠程的,也可以是本地的。第二種:
- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
第一個參數是讀取html文件得到的字符串,第二個參數是獲取html文件中引用圖片等資源的路徑第三種:
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
用的比較少,但是自由度最高。參數依次是:文件數據、文件類型、編碼類型、資源路徑(同第二種)。
3.協議方法[UIWebViewDelegate]
//準備加載時調用(通過返回值判斷是否調用)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
//開始加載時調用
- (void)webViewDidStartLoad:(UIWebView *)webView;
//結束加載時調用
- (void)webViewDidFinishLoad:(UIWebView *)webView;
//加載失敗時調用
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;
4.屬性
@property (nullable, nonatomic, assign) id <UIWebViewDelegate> delegate;//代理
@property (nonatomic, readonly, strong) UIScrollView *scrollView NS_AVAILABLE_IOS(5_0);//內置的scrollView
@property (nullable, nonatomic, readonly, strong) NSURLRequest *request;//URL請求
@property (nonatomic, readonly, getter=canGoBack) BOOL canGoBack;//能否返回上一級
@property (nonatomic, readonly, getter=canGoForward) BOOL canGoForward;//能否進入下一級
@property (nonatomic, readonly, getter=isLoading) BOOL loading;//是否正在加載
@property (nonatomic) BOOL scalesPageToFit;//是否適應屏幕大小
@property (nonatomic) UIDataDetectorTypes dataDetectorTypes NS_AVAILABLE_IOS(3_0);//轉鏈接,比較重要
@property (nonatomic) BOOL allowsInlineMediaPlayback NS_AVAILABLE_IOS(4_0);//是否使用內聯播放器播放視頻
@property (nonatomic) BOOL mediaPlaybackRequiresUserAction NS_AVAILABLE_IOS(4_0);//是否自動播放
@property (nonatomic) BOOL mediaPlaybackAllowsAirPlay NS_AVAILABLE_IOS(5_0);//是否支持air play
@property (nonatomic) BOOL suppressesIncrementalRendering NS_AVAILABLE_IOS(6_0);//是否加載數據後渲染界面
@property (nonatomic) BOOL keyboardDisplayRequiresUserAction NS_AVAILABLE_IOS(6_0);//直接翻譯
@property (nonatomic) UIWebPaginationMode paginationMode NS_AVAILABLE_IOS(7_0);//網頁翻頁模式
@property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode NS_AVAILABLE_IOS(7_0);//
@property (nonatomic) CGFloat pageLength NS_AVAILABLE_IOS(7_0);//頁面長度
@property (nonatomic) CGFloat gapBetweenPages NS_AVAILABLE_IOS(7_0);//間距
@property (nonatomic, readonly) NSUInteger pageCount NS_AVAILABLE_IOS(7_0);//頁數
//下面這兩好像與分屏有關,有朋友瞭解的給我留個言,感激不盡
@property (nonatomic) BOOL allowsPictureInPictureMediaPlayback NS_AVAILABLE_IOS(9_0);
@property (nonatomic) BOOL allowsLinkPreview NS_AVAILABLE_IOS(9_0);