一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - 在iOS應用中使用UIWebView創建簡單的網頁瀏覽器界面

在iOS應用中使用UIWebView創建簡單的網頁瀏覽器界面

2021-01-06 14:49麒麟 IOS

這篇文章主要介紹了在iOS應用中使用UIWebView創建簡單的網頁瀏覽器界面的方法,包括動態獲取UIWebView高度的實現,需要的朋友可以參考下

uiwebview是ios sdk中一個最常用的控件。是內置的瀏覽器控件,我們可以用它來瀏覽網頁、打開文檔等等。這篇文章我將使用這個控件,做一個簡易的瀏覽器。如下圖:

在iOS應用中使用UIWebView創建簡單的網頁瀏覽器界面

我們創建一個window-based application程序命名為:uiwebviewdemo

uiwebview的loadrequest可以用來加載一個url地址,它需要一個nsurlrequest參數。我們定義一個方法用來加載url。在uiwebviewdemoviewcontroller中定義下面方法:

復制代碼 代碼如下:

- (void)loadwebpagewithstring:(nsstring*)urlstring
{
    nsurl *url =[nsurl urlwithstring:urlstring];
    nslog(urlstring);
    nsurlrequest *request =[nsurlrequest requestwithurl:url];
    [webview loadrequest:request];
}


在界面上放置3個控件,一個textfield、一個button、一個uiwebview,布局如下:

 

在iOS應用中使用UIWebView創建簡單的網頁瀏覽器界面

在代碼中定義相關的控件:webview用于展示網頁、textfield用于地址欄、activityindicatorview用于加載的動畫、buttonpress用于按鈕的點擊事件。

復制代碼 代碼如下:

@interface uiwebviewdemoviewcontroller :uiviewcontroller<uiwebviewdelegate> {   
    iboutlet uiwebview *webview;
    iboutlet uitextfield *textfield;
    uiactivityindicatorview *activityindicatorview;
    
}
- (ibaction)buttonpress:(id) sender;
- (void)loadwebpagewithstring:(nsstring*)urlstring;
@end


使用ib關聯他們。

 

設置uiwebview,初始化uiactivityindicatorview:

復制代碼 代碼如下:

- (void)viewdidload
{
    [super viewdidload];
    webview.scalespagetofit =yes;
    webview.delegate =self;
    activityindicatorview = [[uiactivityindicatorview alloc]
                             initwithframe : cgrectmake(0.0f, 0.0f, 32.0f, 32.0f)] ;
    [activityindicatorview setcenter: self.view.center] ;
    [activityindicatorview setactivityindicatorviewstyle: uiactivityindicatorviewstylewhite] ;
    [self.view addsubview : activityindicatorview] ;
    [self buttonpress:nil];
    // do any additional setup after loading the view from its nib.
}


uiwebview主要有下面幾個委托方法:

 

1、- (void)webviewdidstartload:(uiwebview *)webview;開始加載的時候執行該方法。
2、- (void)webviewdidfinishload:(uiwebview *)webview;加載完成的時候執行該方法。
3、- (void)webview:(uiwebview *)webview didfailloadwitherror:(nserror *)error;加載出錯的時候執行該方法。

我們可以將activityindicatorview放置到前面兩個委托方法中。

復制代碼 代碼如下:

- (void)webviewdidstartload:(uiwebview *)webview
{
    [activityindicatorview startanimating] ;
}
- (void)webviewdidfinishload:(uiwebview *)webview
{
    [activityindicatorview stopanimating];
}


buttonpress方法很簡單,調用我們開始定義好的loadwebpagewithstring方法就行了:

復制代碼 代碼如下:

- (ibaction)buttonpress:(id) sender
{
    [textfield resignfirstresponder];
    [self loadwebpagewithstring:textfield.text];
    
}


當請求頁面出現錯誤的時候,我們給予提示:

復制代碼 代碼如下:

- (void)webview:(uiwebview *)webview didfailloadwitherror:(nserror *)error
{
    uialertview *alterview = [[uialertview alloc] initwithtitle:@"" message:[error localizeddescription]  delegate:nil cancelbuttontitle:nil otherbuttontitles:@"ok", nil];
    [alterview show];
    [alterview release];
}


動態獲取uiwebview高度
監聽 webview的 contentsize,每當contentsize的值改變時就去更改webview 的frame。

復制代碼 代碼如下:

[activitywebview.scrollview addobserver:self forkeypath:@"contentsize" options:nskeyvalueobservingoptionnew context:nil];


然后在回調方法里改變webview的frame

復制代碼 代碼如下:

- (void)observevalueforkeypath:(nsstring *)keypath ofobject:(id)object change:(nsdictionary *)change context:(void *)context
{
    if ([keypath isequaltostring:@"contentsize"]) {
        webviewheight = [[activitywebview stringbyevaluatingjavascriptfromstring:@"document.body.offsetheight"] floatvalue];
        cgrect newframe       = activitywebview.frame;
        newframe.size.height  = webviewheight;
        activitywebview.frame = newframe;
        [maintableview settableheaderview:activitywebview];
    }
}


在頁面消失時記得 remove 監聽對象,否則會閃退

復制代碼 代碼如下:

-(void)viewwilldisappear:(bool)antimated{
    [super viewwilldisappear:antimated];
    [activitywebview.scrollview removeobserver:self
forkeypath:@"contentsize" context:nil];
}

延伸 · 閱讀

精彩推薦
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
主站蜘蛛池模板: 精品videoss另类日本 | 1024国产基地永久免费 | 美艳教师刘艳第三部166 | 四虎com | 天天综合天天影视色香欲俱全 | 青草青草伊人精品视频 | 男人午夜禁片在线观看 | 四虎影院在线免费观看视频 | 国人精品视频在线观看 | tube99大学生 | 国产91网站在线观看 | 成人国产在线观看 | 色婷在线 | 欧美同性猛男videos | 精品无码人妻一区二区免费AV | 操妈小说| 日韩操片| 蜜桃视频在线观看官网 | www.四虎com| 国产伦精一区二区三区视频 | 免费永久视频 | 五月天91| 亚洲激情网站 | 魔镜号中文字幕 | 欧美3p大片在线观看完整版 | 欧美多gayxxxx | 超碰av | 鄂州一家三口完整版免费 | tube8最近日本护士 | 日韩一级片在线观看 | 国产在线激情视频 | 国产爱啪啪| 亚洲精品青青草原avav久久qv | 欧美另类杂交a | 欧美香蕉 | heyzo在线观看 | 久久亚洲精品AV成人无码 | 免费视频左左视频 | 乌克兰成人性色生活片 | 人体做爰aaaa免费 | 久久视频这只精品99re6 |