亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

淺談iOS解析HTMl標簽以及開發中的一些坑

2020-07-26 02:35:26
字體:
來源:轉載
供稿:網友

開篇

看了看更新日期好久沒寫簡書了,經常還有小伙伴在文章下面評論,看到自己寫的東西還是有點用的,鼓勵自己接著堅持下去吧,哈哈。今天主要就寫寫iOS中怎么解析HTML標簽,我們常用的后臺返回數據一般是json格式的但是有些時候如果我們收到的是帶HTMl標簽的我們該怎么處理他呢,今天就來說一說吧。

正文

前兩天獲取后臺數據的時候,得到這么一條返回信息

"恭喜您獲得<font color='red'>8.1元</font>現金獎勵 "

本來簡簡單單的把返回數據展示到label上的事情一下子變得有趣起來,后臺說是為了以后產品改返回內容的時候容易處理,可以這理由很強勢。

但是作為開發的我們怎么處理呢,首先我們看下安卓的處理方法,安卓對處理這個還是比較粗暴的人家有系統方法,如下:

那么iOS端怎么處理呢,我們可以用webview,也可以用Label的attributedString屬性,也可以直接簡單粗暴的分割字符串,然后去除HTML標簽,然后處理,聽聽就讓人惆悵,然而畢竟是一種方法,能解決問題的方法都是好方法,我們就放一下最粗暴方法的主要代碼(其余方法在評論補充有,哈哈),去除HTML標簽的方法如下:

//過濾后臺返回字符串中的標簽- (NSString *)flattenHTML:(NSString *)html {    NSScanner *theScanner;  NSString *text = nil;    theScanner = [NSScanner scannerWithString:html];    while ([theScanner isAtEnd] == NO) {    // find start of tag    [theScanner scanUpToString:@"<" intoString:NULL] ;    // find end of tag    [theScanner scanUpToString:@">" intoString:&text] ;    // replace the found tag with a space    //(you can filter multi-spaces out later if you wish)    html = [html stringByReplacingOccurrencesOfString:        [NSString stringWithFormat:@"%@>", text]                        withString:@""];  }  MidStrTitle = html;  return html;}

這樣我們就處理掉了HTML標簽,那么問題來了,如果我們要處理的是很多的HTML標簽呢,我們該怎么處理呢,這就是這篇文章的目的。

TFHpple庫

如果我們想要得到是如下一個HTML源碼中某一個標簽的內容呢,部分源碼如下,這里只是放了標簽部分的內容

<title>關于APP的聲明</title></head><body><h3>關于APP的聲明</h3><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p><h3>聯系我們</h3><p>若您在使用該APP有遇到任何問題或有新想法,都可以聯系我們. 如下是我們的聯系方式:</p><ul><li>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</li><li>E-mail: xxxxxxxxxxxxxxxxxxxxxxxxxx</li><li>phone: xxxxxxxxxxxxxxxxxx</li></ul><h3>感謝</h3><p>首先,感謝廣大用戶對公司的支持和鼓勵,謝謝你們對我們的一路支持.</p><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p><h3>版權聲明</h3><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p></body></html>

這里如果我要針對性取某一個標簽的內容就要用到我們今天介紹的庫了。

環境的配置

導入靜態庫

然后把導入的靜態庫添加到文件的路徑

然后導入TFHpple庫就可以了。

使用方法1,簡單的標簽形式取值法

直接上代碼

NSString *resourcePath = [[NSBundle mainBundle] resourcePath];    NSString *filePath =[resourcePath stringByAppendingPathComponent:@"about.html"];    NSData *data =[[NSData alloc]initWithContentsOfFile:filePath];    NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  //data轉字符串 為了打印不是亂碼    NSLog(@"------%@",result);      TFHpple *Hpple = [[TFHpple alloc]initWithHTMLData:data];      //測試1:獲取簡單的標題    NSArray *array =[Hpple searchWithXPathQuery:@"http://title"]; //獲取到為title的標題      for (TFHppleElement *HppleElement in array) {        NSLog(@"測試1的目的標簽內容:-- %@",HppleElement.text);          }

我們首先獲取到本地的about.html的文件,然后轉化為data,加UTF8編碼轉換為我們可以看到的容如下圖:

上部分為HTML文件的原標簽,下部分為我們去到的標簽為“title”的內容。 這樣我們就得到了我們想要的

使用方法2:有自己屬性的標簽內容取值

上面的那個HTML文件由于內容的局限性不方便我們舉例,我們使用的HTML標簽源碼如下:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>hello</title></head><body>hello world<span></span>無序列表<ul type="disc">  <li>蘋果</li>  <li>水果</li>  <li>桃子</li></ul><ul type="circle">  <li>蘋果2</li>  <li>水果2</li>  <li>桃子2</li></ul></body></html>

我們想去取到的是無序列表 節點屬性為type 屬性值為disc的標簽內容,顯然上面的方法已經不能滿足我們的需要,老規矩先上代碼:

//測試2:獲取更加詳細的內容  NSString *resourcePath = [[NSBundle mainBundle] resourcePath];  NSString *filePath =[resourcePath stringByAppendingPathComponent:@"first.html"];  NSData *data =[[NSData alloc]initWithContentsOfFile:filePath];    NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  //data轉字符串 為了打印不是亂碼  NSLog(@"------%@",result);    TFHpple *Hpple = [[TFHpple alloc]initWithHTMLData:data];  NSArray *array =[Hpple searchWithXPathQuery:@"http://ul"];    for (TFHppleElement *HppleElement in array) {        if ([HppleElement.attributes[@"type"]isEqualToString:@"disc"]) { //找出 ul標簽下 節點屬性type  屬性值為 disc 的數組            NSArray *array2 = [HppleElement searchWithXPathQuery:@"http://li"];            for (TFHppleElement *HppleElement2 in array2) {                NSLog(@"測試2的目的標簽內容:-- %@",HppleElement2.text);      }    }  }

使用方法重點在下面的這個if語句的判斷里

 if ([HppleElement.attributes[@"type"]isEqualToString:@"disc"]) {}

如果存在這種條件下的內容,根據這個BOOL值,去取到下面標簽為“li‘的內容 運行結果如下:

項目中遇到的一些坑

我們取完了標簽并不能結束,好不容易有時間就再寫一下一些遇到的小的問題吧。

自定義鍵盤

自定義鍵盤也算是老問題了,由于情況的不同,我們可能需要定義一個完全自定義的鍵盤,來適應各種奇葩的需求。最近看代碼的時候才發現不同的人寫法真不一樣,這里介紹一個個人認為比較簡單的方法吧。

UITextField的inputView的屬性,用法舉例如下:

kkeyboardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320 ,260 )] ;  kkeyboardView.backgroundColor = [UIColor lightGrayColor];  [self setUpMyKeyBoard2];  self.textfiled.inputView = kkeyboardView;

創建一個View 然后把它作為UITextField的inputView,這個時候就可以完全的自定義自己想要的自定義鍵盤了,產品你過來說說你還要鍵盤上有啥。

UIScrollView的滾動問題

前天同事說了一個奇怪的問題,說懶加載也寫了,布局也搞了,偏移量也設置了,在別的頁面都搞好了,這個頁面的滾動試圖忽然就不動了。老司機也翻車了喜聞樂見,但是問題怎么處理呢。

-(void)viewDidLayoutSubviews{  _BaseScore.contentSize = CGSizeMake(SCREEN_WIDTH, 568.0 - 44); }

一陣折騰之后給了他這個方法,把偏移量寫在這個方法里就可以滾動了,同事不禁說老了老了,發現自己記憶越來越差了,哈哈,有一群這樣的同事真的工作比較開心。

后記

今天的主要介紹就這么多吧,希望對需要的小伙伴有所幫助,有時間的話下次寫一下,項目中用到的,商家端生成二維碼收款,用戶端掃描二維碼付款,以及定時刷新,狀態判斷,掃描二維碼生成邀請碼等一系列二維碼相關的功能。有寫的不對地方的歡迎指出,大神輕噴,哈哈。

補充: 再補充兩條簡單情況下的方法:

Label的attributedString屬性

NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[h5str dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];[selflab setAttributedText:attrStr];

利用web view

_webView = [[UIWebView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];NSString *html_str = [NSString stringWithFormat:@"<div style='color:red'>666666</div> 測試 %@",@"新風作浪",@"2020-01-00"];[self.webView loadHTMLString:html_str baseURL:nil];[self.view addSubview:self.webView];

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩女优人人人人射在线视频| 亚洲级视频在线观看免费1级| 国产一区二区三区丝袜| 国产网站欧美日韩免费精品在线观看| 97在线精品视频| 欧美日韩激情网| 欧美日韩国产成人在线| 日韩精品免费在线视频| 两个人的视频www国产精品| 少妇高潮久久77777| 精品自拍视频在线观看| xxx欧美精品| 国产精品久久久久影院日本| 日韩av在线电影网| 日韩福利在线播放| 国产女人精品视频| 亚洲视频在线观看| 国产精品自产拍在线观看| 九色精品免费永久在线| 奇门遁甲1982国语版免费观看高清| 国产精品福利在线观看网址| 成人做爰www免费看视频网站| 日韩精品中文字幕视频在线| 国产精品入口免费视频一| 欧美精品久久久久久久久| 久久精品久久精品亚洲人| 亚洲日韩欧美视频一区| 欧美激情亚洲综合一区| 亚洲人成网站色ww在线| 亚洲美女中文字幕| 日韩视频欧美视频| 成人网中文字幕| 国产精品精品久久久| 欧美精品在线第一页| 亚洲一区二区国产| 亚洲欧美国产日韩天堂区| 国产日产欧美a一级在线| 亚洲欧美在线播放| 国产精品人成电影在线观看| 亚洲精品国产拍免费91在线| 色偷偷噜噜噜亚洲男人的天堂| 中文字幕成人精品久久不卡| 日本午夜在线亚洲.国产| 亚洲精品视频二区| 日韩精品在线第一页| 97在线看福利| 久久久精品国产亚洲| 国产一区二区三区视频在线观看| 国产精品影片在线观看| 性欧美办公室18xxxxhd| 日本国产欧美一区二区三区| 国产精品99久久久久久白浆小说| 国产mv免费观看入口亚洲| 久久久久久久久国产| 久久国产精品久久久久久久久久| 视频一区视频二区国产精品| 麻豆成人在线看| 久久五月情影视| 欧美大片在线免费观看| 国产精品九九久久久久久久| 97国产精品久久| 国产精品av在线| 亚洲免费视频网站| 欧美大片在线看免费观看| zzijzzij亚洲日本成熟少妇| 亚洲精品国产电影| 97在线视频免费播放| www日韩中文字幕在线看| 91在线无精精品一区二区| 亚洲视频电影图片偷拍一区| 亚洲国产精品99久久| 亚洲人在线观看| 不卡av电影在线观看| 欧美精品videosex性欧美| 97精品国产97久久久久久春色| 国产精品1234| 亚洲国产私拍精品国模在线观看| 懂色av中文一区二区三区天美| 欧美国产日韩一区二区| 国产日韩欧美在线视频观看| 国产欧美精品va在线观看| 欧美另类极品videosbestfree| 国模视频一区二区三区| 日本最新高清不卡中文字幕| 91九色在线视频| 国产一区二区在线播放| 免费成人高清视频| 国产精品第1页| 亚洲人成电影在线播放| 亚洲国产91色在线| 亚洲第一区第一页| 欧美亚洲另类在线| 国产精品激情av电影在线观看| 亚洲天堂网站在线观看视频| 亚洲色图在线观看| 一区二区成人av| 91影视免费在线观看| 国产成人一区二区三区电影| 日韩在线免费av| 性色av一区二区三区红粉影视| 97香蕉超级碰碰久久免费软件| 国产精品av在线播放| 91成人精品网站| 国产精品扒开腿做爽爽爽男男| 国产国产精品人在线视| 色狠狠av一区二区三区香蕉蜜桃| 国产不卡视频在线| 欧美日韩福利在线观看| 亚洲性生活视频| 成人精品一区二区三区电影免费| 国产视频欧美视频| 97欧美精品一区二区三区| 另类视频在线观看| 久久久久久久久网站| 国产视频久久久| 国产精品极品美女在线观看免费| 一本色道久久综合狠狠躁篇的优点| 国产精品久久久久av免费| 久久夜色精品亚洲噜噜国产mv| 欧美国产日韩一区| 国产欧美亚洲视频| 亚洲成人999| 久久人人爽人人爽爽久久| 色婷婷av一区二区三区在线观看| 亚洲一级片在线看| 久久99亚洲热视| 色综合老司机第九色激情| 国产精品成人一区二区| 亚洲欧美中文另类| 一区二区三区无码高清视频| 欧洲成人免费视频| 国产精品久久久久aaaa九色| 日韩av手机在线看| 亚洲精品99久久久久| 亚洲国产精品悠悠久久琪琪| 亚洲娇小xxxx欧美娇小| 日韩中文理论片| 91地址最新发布| 亚洲网站在线播放| 日韩亚洲成人av在线| 欧美极品xxxx| 97在线视频观看| 欧美黑人巨大精品一区二区| 国产精品高潮呻吟久久av无限| 国产成人精品一区二区三区| 日韩在线免费av| 亚洲综合在线做性| 亚洲精品一区中文| 亚洲一区999| 欧美丝袜一区二区三区| 久久久久久国产| 在线观看免费高清视频97| 亚洲淫片在线视频| 大桥未久av一区二区三区| 91精品免费久久久久久久久| 亚洲大胆人体av| 精品二区三区线观看| www亚洲欧美| 好吊成人免视频| 久久久亚洲成人| 久久精品99久久香蕉国产色戒| 亚洲乱码国产乱码精品精天堂| 国产精品综合不卡av| 久久久精品国产亚洲|