iOS UIWebView的使用

WebView的使用

使用UIWebView可以實(shí)現(xiàn)一個(gè)內(nèi)置的瀏覽器,而且可以直接將這個(gè)瀏覽器內(nèi)嵌到應(yīng)用的任意位置
UIWebView直接集成了UIView,一般不可以與用戶交互
獲取UIWebView對(duì)象后,可配置如下常用屬性和方法


@property(nonatomic) BOOL scalesPageToFit;//該屬性控制是否縮放網(wǎng)頁以適應(yīng)該控件
@property(nonatomic) UIDataDetectorTypes dataDetectorTypes NS_AVAILABLE_IOS(3_0);//該屬性支持以下枚舉
  • UIDataDetectorTypePhoneNumber //自動(dòng)檢測(cè)網(wǎng)頁上的電話號(hào)碼,點(diǎn)擊會(huì)撥號(hào)
  • UIDataDetectorTypeLink //自動(dòng)檢測(cè)網(wǎng)頁上的超級(jí)鏈接
  • UIDataDetectorTypeAddress //自動(dòng)檢測(cè)網(wǎng)頁上的地址
  • UIDataDetectorTypeCalendarEvent //自動(dòng)檢測(cè)網(wǎng)頁上的日歷事件
  • UIDataDetectorTypeNone //不檢測(cè)網(wǎng)頁上的任何內(nèi)容
  • UIDataDetectorTypeAll //自動(dòng)檢測(cè)網(wǎng)頁上所有特殊內(nèi)容
- (void)loadRequest:(NSURLRequest *)request;//加載顯示URL網(wǎng)頁請(qǐng)求

- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;//加載HTML
@property (nullable, nonatomic, readonly, strong) NSURLRequest *request;//URL請(qǐng)求

 - (void)reload;//重新加載

- (void)stopLoading; //停止加載

- (void)goBack; //網(wǎng)頁后退

- (void)goForward; //網(wǎng)頁前進(jìn)
- 

當(dāng)UIWebView加載網(wǎng)頁時(shí),程序可為UIWebView設(shè)置一個(gè)delegate委托,該委托必須實(shí)現(xiàn)<UIWebViewDelegate>協(xié)議,該協(xié)議包括如下方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;//當(dāng)UIWebView將要加載指定的URL請(qǐng)求時(shí),激發(fā)該方法

- (void)webViewDidStartLoad:(UIWebView *)webView;//當(dāng)開始加載時(shí)激發(fā)
- (void)webViewDidFinishLoad:(UIWebView *)webView;//當(dāng)完成加載時(shí)激發(fā)
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;//當(dāng)加載錯(cuò)誤時(shí)激發(fā)

通過下面實(shí)例代碼來實(shí)現(xiàn)一個(gè) 迷你瀏覽器


@interface ViewController () <UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (weak, nonatomic) IBOutlet UITextField*addressBar;
@end

@implementationViewController{

    UIActivityIndicatorView *_activityIndizator;

}

- (void)viewDidLoad {

    [super viewDidLoad];

    //設(shè)置自動(dòng)縮放網(wǎng)頁以適應(yīng)該控件

    self.webView.scalesPageToFit = YES;

    //為該控件設(shè)置委托

    //因?yàn)槭褂迷摽刂破鲗?duì)象作為UIWebView控件的委托對(duì)象,所以該控制器類需要實(shí)現(xiàn)<UIWebViewDelegate>協(xié)議

    self.webView.delegate = self;

    //創(chuàng)建UIActivityIndicatorView控件,用來顯示網(wǎng)頁加載中

    _activityIndizator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];

    //將UIActivityIndicatorView顯示在當(dāng)前View的中央

    [_activityIndizator setCenter:self.view.center];

    //設(shè)置樣式

    _activityIndizator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;

    //將_activityIndizator添加到View 并隱藏

    [self.view addSubview:_activityIndizator];

    _activityIndizator.hidden = YES;

}

//點(diǎn)擊前往打開網(wǎng)頁

- (IBAction)goButton:(id)sender {

    [self.addressBar resignFirstResponder];

    //獲取用戶輸入網(wǎng)址

    NSString *addressStr = self.addressBar.text;

    //如果用戶輸入的地址不包括http:// 則為用戶添加http://

    if (![addressStr hasPrefix:@"http://"]) {

        addressStr = [NSString stringWithFormat:@"http://%@",addressStr];

        self.addressBar.text = addressStr;

    }

    //創(chuàng)建URL請(qǐng)求

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:addressStr]];

    //加載指定URL對(duì)應(yīng)的網(wǎng)頁

    [self.webView loadRequest:request];

}

//實(shí)現(xiàn)后退方法

- (IBAction)goBackButton:(id)sender {

    if (self.webView.canGoBack) {

        [self.webView goBack];
     }
}
//實(shí)現(xiàn)<UIWebViewDelegate>協(xié)議中的方法

//當(dāng)WebView開始加載時(shí)

- (void)webViewDidStartLoad:(UIWebView *)webView{

    //顯示_activityIndizator 并開始轉(zhuǎn)動(dòng)

    _activityIndizator.hidden = NO;

    [_activityIndizator startAnimating];
}
//當(dāng)WebView完成加載時(shí)
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    _activityIndizator.hidden = YES;
    [_activityIndizator stopAnimating];
}

//當(dāng)WebView加載失敗時(shí)
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error{

    //當(dāng)加載錯(cuò)誤時(shí),用UIAlertController來顯示錯(cuò)誤信息
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"錯(cuò)誤" message:error.localizedDescription preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *cancelAlert = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnullaction) {
    }];
    [alert addAction:cancelAlert];
    //顯示Alert
    [self presentViewController:alert animated:YES completion:^{
       _activityIndizator.hidden = YES;

        [_activityIndizator stopAnimating];
   }];
}
- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

最終通過代碼可實(shí)現(xiàn)如下效果

最終結(jié)果

如果出現(xiàn)下面這個(gè)提示框 則說明網(wǎng)頁加載失敗

提示

錯(cuò)誤原因是因?yàn)?默認(rèn)在iOS9 后,蘋果將原h(huán)ttp協(xié)議改成了https協(xié)議,使用 TLS1.2 SSL加密請(qǐng)求數(shù)據(jù)。我們只需要為Info.plist如下字段即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 現(xiàn)在對(duì)于 混合式 移動(dòng)端開發(fā)越來越流行,因?yàn)殚_發(fā)成本上、速度上都比傳統(tǒng)的APP開發(fā)要好,混合式開發(fā)是傳統(tǒng)模式與P...
    丶紳士丿丨丨閱讀 2,300評(píng)論 1 2
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,614評(píng)論 4 61
  • 你是個(gè)平凡的姑娘,平凡的出生,平凡的經(jīng)歷。平凡的過著日復(fù)一日,年復(fù)一年的平凡日子。 是,你沒有多么出眾的外表讓人眼...
    馥菲凰梵閱讀 477評(píng)論 0 1
  • Seeting 增加: INSTALLED_APPS = [ # 'django.contrib.admin', ...
    whong736閱讀 523評(píng)論 0 3
  • 詞:董書利你是一本書未輕易去翻那不加修飾的封面足以讓我思緒萬千 你寧愿是迷我無力承受失去也不想歷史重演來祭奠自己的...
    星巢文化閱讀 335評(píng)論 4 4

友情鏈接更多精彩內(nèi)容