網(wǎng)絡(luò)2-UIWebView

1.UIWebView

UIWebView不僅能加載網(wǎng)絡(luò)資源還可以加載本地資源,目前支持的常用的文檔格式如:html、pdf碰辅、docx、txt等介时。

UIWebView整個(gè)使用相當(dāng)簡(jiǎn)單:創(chuàng)建URL->創(chuàng)建請(qǐng)求->加載請(qǐng)求没宾,無(wú)論是加載本地文件還是Web內(nèi)容都是這三個(gè)步驟。UIWebView內(nèi)容加載事件同樣是通過(guò)代理通知外界沸柔,常用的代理方法如開始加載循衰、加載完成、加載出錯(cuò)等勉失,這些方法通掣迹可以幫助開發(fā)者更好的控制請(qǐng)求加載過(guò)程。

加載資源:

- (void)loadRequest:(NSURLRequest *)request;

常用的屬性和方法:

//重新加載(刷新) 
- (void)reload;
//停?止加載    
- (void)stopLoading;
//回退     
- (void)goBack;
//前進(jìn)    
- (void)goForward;
//需要進(jìn)?檢測(cè)的數(shù)據(jù)類型   
@property(nonatomic) UIDataDetectorTypes dataDetectorTypes 
//是否能回退 
@property(nonatomic,readonly,getter=canGoBack) BOOL canGoBack;
//是否能前進(jìn) 
@property(nonatomic,readonly,getter=canGoForward) BOOL canGoForward; 
//是否正在加載中  
@property(nonatomic,readonly,getter=isLoading) BOOL loading;
//是否伸縮內(nèi)容至適應(yīng)屏幕當(dāng)前尺寸 
@property(nonatomic) BOOL scalesPageToFit; 

遵守UIWebViewDelegate協(xié)議乱凿,監(jiān)聽UIWebView的加載過(guò)程:

//開始發(fā)送請(qǐng)求(加載數(shù)據(jù))時(shí)調(diào)用:
- (void)webViewDidStartLoad:(UIWebView *)webView;
//請(qǐng)求完畢(加載數(shù)據(jù)完畢)時(shí)調(diào)?:
- (void)webViewDidFinishLoad:(UIWebView *)webView;
//請(qǐng)求錯(cuò)誤時(shí)調(diào)用:
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
//監(jiān)聽UIWebView的加載過(guò)程:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

下面是一個(gè)例子:

在storyBoard中拖入如下控件:

searchBar的代理方法:

-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    [self request:_searchBar.text];
    [searchBar resignFirstResponder];
}

加載searchBar中的請(qǐng)求:

-(void)request:(NSString *)urlStr{
    //創(chuàng)建url
    NSURL *url;
    
    //如果file://開頭的字符串則加載bundle中的文件
    if([urlStr hasPrefix:kFILEPROTOCOL]){
        //取得文件名
        NSRange range= [urlStr rangeOfString:kFILEPROTOCOL];
        NSString *fileName=[urlStr substringFromIndex:range.length];
        url=[[NSBundle mainBundle] URLForResource:fileName withExtension:nil];
    }else if(urlStr.length>0){
        //如果是http請(qǐng)求則直接打開網(wǎng)站
        if ([urlStr hasPrefix:@"http"]) {
            url=[NSURL URLWithString:urlStr];
        }else{//如果不符合任何協(xié)議則進(jìn)行搜索
            urlStr=[NSString stringWithFormat:@"http://m.bing.com/search?q=%@",urlStr];
        }
        urlStr=[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//url編碼
        url=[NSURL URLWithString:urlStr];
        
    }
    //創(chuàng)建請(qǐng)求
    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    //加載請(qǐng)求頁(yè)面
    [_webView loadRequest:request];
}

WebView的代理方法:

-(void)webViewDidStartLoad:(UIWebView *)webView{
    //顯示網(wǎng)絡(luò)請(qǐng)求加載
    [UIApplication sharedApplication].networkActivityIndicatorVisible=true;
}

-(void)webViewDidFinishLoad:(UIWebView *)webView{
    //隱藏網(wǎng)絡(luò)請(qǐng)求加載圖標(biāo)
    [UIApplication sharedApplication].networkActivityIndicatorVisible=false;
    //設(shè)置按鈕狀態(tài)
    [self setBarButtonStatus];
}

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    NSLog(@"error detail:%@",error.localizedDescription);
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"系統(tǒng)提示" message:@"網(wǎng)絡(luò)連接發(fā)生錯(cuò)誤!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"確定", nil];
    [alert show];
}

設(shè)置前進(jìn)后退按鈕:

-(void)setBarButtonStatus{
    if (_webView.canGoBack) {
        _barButtonBack.enabled=YES;
    }else{
        _barButtonBack.enabled=NO;
    }
    if(_webView.canGoForward){
        _barButtonForward.enabled=YES;
    }else{
        _barButtonForward.enabled=NO;
    }
}

運(yùn)行結(jié)果如下:

你可以在這里下載到代碼。

- (void)getAccessToken:(NSString *)requestToken
{
    [HttpTool postWithPath:@"oauth2/access_token" params:@{
       @"client_id" : kAppKey,
       @"client_secret" : kAppSecret,
       @"grant_type" : @"authorization_code",
       @"redirect_uri" : kRedirectURI,
       @"code" : requestToken
       } success:^(id JSON) {
           // 保存賬號(hào)信息
           Account *account = [[Account alloc] init];
           account.accessToken = JSON[@"access_token"];
           account.uid = JSON[@"uid"];
           [[AccountTool sharedAccountTool] saveAccount:account];
           
           // 回到主頁(yè)面
           ViewController *main = [[ViewController alloc]init];
           if (main) {
               [self presentViewController:main animated:YES completion:nil];
           }
       } failure:^(NSError *error) {
           
           
       }];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咽弦,一起剝皮案震驚了整個(gè)濱河市徒蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌型型,老刑警劉巖段审,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異闹蒜,居然都是意外死亡寺枉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門绷落,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)姥闪,“玉大人,你說(shuō)我怎么就攤上這事砌烁】鹪” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵函喉,是天一觀的道長(zhǎng)避归。 經(jīng)常有香客問(wèn)我,道長(zhǎng)管呵,這世上最難降的妖魔是什么梳毙? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮捐下,結(jié)果婚禮上账锹,老公的妹妹穿的比我還像新娘堂氯。我一直安慰自己,他們只是感情好牌废,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布咽白。 她就那樣靜靜地躺著,像睡著了一般鸟缕。 火紅的嫁衣襯著肌膚如雪晶框。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天懂从,我揣著相機(jī)與錄音授段,去河邊找鬼。 笑死番甩,一個(gè)胖子當(dāng)著我的面吹牛侵贵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缘薛,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼窍育,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宴胧?” 一聲冷哼從身側(cè)響起漱抓,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恕齐,沒(méi)想到半個(gè)月后乞娄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡显歧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年仪或,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片士骤。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡范删,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出敦间,到底是詐尸還是另有隱情瓶逃,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布廓块,位于F島的核電站厢绝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏带猴。R本人自食惡果不足惜昔汉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靶病,春花似錦会通、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至煤辨,卻和暖如春裳涛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背众辨。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工端三, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹃彻。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓郊闯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蛛株。 傳聞我的和親對(duì)象是個(gè)殘疾皇子团赁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開發(fā),例如說(shuō)新浪微博泳挥、微信等然痊,這些應(yīng)用本身可...
    lichengjin閱讀 3,671評(píng)論 2 7
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件屉符、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,117評(píng)論 4 61
  • AFNNetworking 2.0你相信你一定知道AFNNetworking,不知道你還可以看看該作者的博文锹引,所以...
    瞎嘚嘚閱讀 689評(píng)論 1 1
  • IOS之UIWebView的使用 剛接觸IOS開發(fā)1年多矗钟,現(xiàn)在對(duì)于 混合式 移動(dòng)端開發(fā)越來(lái)越流行,因?yàn)殚_發(fā)成本上嫌变、...
    學(xué)無(wú)止境666閱讀 45,795評(píng)論 5 53
  • 啟航的爸爸是個(gè)大學(xué)語(yǔ)文老師吨艇,母親是國(guó)企職工,家境優(yōu)渥腾啥。作為大學(xué)語(yǔ)文老師的爸爸东涡,文學(xué)功底是很好的,所以啟航的名字肯定...
    門里的太陽(yáng)閱讀 209評(píng)論 0 0