91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖

發布時間:2020-08-07 00:00:04 來源:網絡 閱讀:2229 作者:新風作浪 欄目:移動開發

  在上一篇博客   開源中國iOS客戶端學習——(十二)用戶登陸  中講到用戶登陸界面,loginView.xib布局中我們看到有一個UIWebView控件,但是它并沒有加載一個網頁,而是顯示一些文本信息,其中有一些網址的鏈接,點擊這個鏈接的時候條找轉到該網站,或者點擊某個文字標簽同樣的效果。

開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖


再來看看另外一個ViewController,在News/tab下有一個NewDetail類,查看這個ViewController類的xib時又看到WebView控件,同樣他也不是用來加載一個網頁,而是作為視圖布局使用,在開源中國iOS客戶端源碼中還是不止這兩個類中使用webView控件作為布局引擎,在工程文件tab目錄下的SinglePost、SoftwareDeatil 、BlogDetail這些類都是這樣使用;NewDetail這個類作用用于加載顯示一條資訊信息的詳細內容;

開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖

開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖

然后來看看WebView布局界面顯示內容,在選中首頁綜合里資訊某一條的時候,想查看給咨詢詳情,然后查看一些界面特效:

開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖

或許我們會想問什么要使用WebView布局呢,普通的view也一樣可以顯示,顯示文字有ULabel  UITextView  顯示圖片有UIImageView都可以滿足,接著向下看。。。

有一些特殊字體顏色,點擊他們的時候有的跳轉道另一個視圖,有的跳轉道某一個網站,能夠響應用戶的交互;當點擊TNW 和點擊相關文章的某一文章標題時抓取截圖示例如下

開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖


或許有人已經知道這些都是iOS中的富文本,確實這就是使用Web視圖顯示富文本;在普通view中不可以使用富文本嗎?必然也可以,還有一些第三方類庫如RTLabel來支持富文本的使用,在iOS 6為UIKit也帶來了富文本的支持。或許顯示簡單文本標簽沒問題,但是布局一些復雜的視圖就可能比較難搞了,就像在一段文本中對某兩字加上超鏈接,點擊兩個字跳轉道一個網頁,如果是單單兩個字也不是難題,但是對于使用多條信息使用同一個xib界面布局怎么辦?我們并不知道哪些字需要使用富文本加上超鏈接?這時候webView視圖成了最好解決方案,經常我們打開一個網頁的時候比如hao123導航,上面有許多文字鏈接,點擊這些文字跳轉道相應官網,剛好 WebView也可以加載HTML代碼,而且也很簡單,但是在View上就有些困難了;

好了 不廢話,先看看WebView如何加載某一條資訊的內容,先看看某一篇資訊,返回xml格式  http://www.oschina.net/action/api/news_detail?id=40840,解析body節點中的數據是HTML代碼,由WebView加載這些HTML代碼,其他標題有對應的url,將解析的標題和url格式化轉換成HTML代碼加載道webView中;


必然還是先看ViewDidLoad方法


- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tabBarItem.title = @"資訊詳情";
    self.tabBarItem.p_w_picpath = [UIImage p_w_picpathNamed:@"detail"];
    //WebView的背景顏色去除
    [Tool clearWebViewself.webView];
                              
    self.singleNews = [[SingleNews alloc] init];
    self.navigationController.title = @"資訊詳情";
    self.webView.delegate = self;
    [self.webView loadHTMLString:@"" baseURL:nil];
                             
    if ([Config Instance].isNetworkRunning)
    {
        MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];
        [Tool showHUD:@"正在加載" andView:self.view andHUD:hud];
                                 
        NSString *url = [NSString stringWithFormat:@"%@?id=%d",api_news_detail, newsID];
        [[AFOSCClient sharedClient] getPath:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
                                    
            [Tool getOSCNotice2:operation.responseString];
            [hud hide:YES];
                                     
            self.singleNews = [Tool readStrNewsDetail:operation.responseString];
            if (self.singleNews == nil) {
                [Tool ToastNotification:@"加載失敗" andView:self.view andLoading:NO andIsBottom:NO];
                return;
            }
            [self loadData:self.singleNews];
                                     
            //如果有網絡 則緩存它
            if ([Config Instance].isNetworkRunning)
            {
                [Tool saveCache:1 andID:self.singleNews._id andString:operation.responseString];
            }
                                     
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                     
            [hud hide:YES];
            if ([Config Instance].isNetworkRunning) {
                [Tool ToastNotification:@"錯誤 網絡無連接" andView:self.view andLoading:NO andIsBottom:NO];
            }
                                     
        }];
    }
    else
    {
        NSString *value = [Tool getCache:1 andID:newsID];
        if (value) {
            self.singleNews = [Tool readStrNewsDetail:value];
            [self loadData:self.singleNews];
        }
        else {
            [Tool ToastNotification:@"錯誤 網絡無連接" andView:self.view andLoading:NO andIsBottom:NO];
        }
    }
}

ViewDidLoad中主要兩個方法:

1. [ToolclearWebViewBackground:self.webView];去掉WebView背景色,顯示數據的時候就不會覺得他是一個WebView而是一個普通的View視圖;


2. [selfloadData:self.singleNews];  格式化處理字符串,轉換成HTML格式,如設置html的背景顏色字體顏色字體大小等,對于HTML也沒用很深研究,大概能看懂一點,

- (void)loadData:(SingleNews *)n
{
    [self refreshFavorite:n];
    //通知去修改新聞評論數
    Notification_CommentCount *notification = [[Notification_CommentCount alloc] initWithParameters:self andCommentCount:n.commentCount];
    [[NSNotificationCenter defaultCenter] postNotificationName:Notification_DetailCommentCount object:notification];
    //新聞  主要用于微博分享
    [Config Instance].shareObject = [[ShareObject alloc] initWithParameters:n.title andUrl:n.url];
    //控件更新
    NSString *author_str = [NSString stringWithFormat:@"<a >%@</a> 發布于 %@",n.authorid,n.author,n.pubDate];
                                           
    NSString *software = @"";
    if ([n.softwarename isEqualToString:@""] == NO) {
        software = [NSString stringWithFormat:@"<div id='oschina_software' style='margin-top:8px;color:#FF0000;font-size:14px;font-weight:bold'>更多關于: <a href='%@'>%@</a> 的詳細信息</div>",n.softwarelink, n.softwarename];
    }
    NSString *html = [NSString stringWithFormat:@"<body style='background-color:#EBEBF3'>%@<div id='oschina_title'>%@</div><div id='oschina_outline'>%@</div><hr/><div id='oschina_body'>%@</div>%@%@%@</body>",HTML_Style, n.title,author_str, n.body,software,[Tool generateRelativeNewsString:n.relativies],HTML_Bottom];
                                           
    NSString *result = [Tool getHTMLString:html];
    [self.webView loadHTMLString:result baseURL:nil];
}


[selfloadData:self.singleNews]方法中對HTML特點格式化中

兩個宏定義 HTML_Style   HTML_Bottom


//html頭部
#define HTML_Style @"<style>#oschina_title {color: #000000; margin-bottom: 6px; font-weight:bold;}#oschina_title img{vertical-align:middle;margin-right:6px;}#oschina_title a{color:#0D6DA8;}#oschina_outline {color: #707070; font-size: 12px;}#oschina_outline a{color:#0D6DA8;}#oschina_software{color:#808080;font-size:12px}#oschina_body img {max-width: 300px;}#oschina_body {font-size:16px;max-width:300px;line-height:24px;} #oschina_body table{max-width:300px;}#oschina_body pre { font-size:9pt;font-family:Courier New,Arial;border:1px solid #ddd;border-left:5px solid #6CE26C;background:#f6f6f6;padding:5px;}</style>"
#define HTML_Bottom @"<div style='margin-bottom:60px'/>"

[ToolgenerateRelativeNewsString:n.relativies]    處理資訊后面相關文章的布局的HTML


+ (NSString *)generateRelativeNewsString:(NSArray *)array
{
    if (array == nil || [array count] == 0) {
        return @"";
    }
    NSString *middle = @"";
    for (RelativeNews *r in array) {
        middle = [NSString stringWithFormat:@"%@<a href=%@ style='text-decoration:none'>%@</a><p/>",middle, r.url, r.title];
    }
    return [NSString stringWithFormat:@"<hr/>相關文章<div style='font-size:14px'><p/>%@</div>", middle];
}



[self.webView loadHTMLString:result baseURL:nil];才是將html格式化成NSString對象后加載道WebView上,還必須處理webView的一個委托方法。

如果委托方法返回YES表示允許UIWebView請求,但是webView用來布局顯示自定義內容,應該返回為NO;假如我們點擊某個文字超鏈接或url時就會發送發送給委托方法,基于這個url做出響應;


#pragma 瀏覽器鏈接處理
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    [Tool analysis:[request.URL absoluteString] andNavController:self.parentViewController.navigationController];
    if ([request.URL.absoluteString isEqualToString:@"about:blank"])
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

[Tool analysis:[request.URL absoluteString] andNavController:self.parentViewController.navigationController];響應webView中URL,如果這個url不止站內鏈接就會調用Safair加載這個網址,如果是站內的信息則跳轉對于信息視圖;詳情可查看analysis:l andNavController:實現方法;


if()語句有個判斷,如果請求的URL網址是空白,則webView就會加載這個頁面,否則不加載這個url   request.URL.absoluteString表示獲取url完整鏈接


本篇博客并沒講解多少WebView如何去布局,主要還在于HTML標簽的設計,還是請求數據,解析xml,解析出來的數據格式化添加到HTML的標簽節點之中,再有WebView去加載顯示;

下面的一個示例測試,獲取的都是靜態文本數據,主要還是看HTML格式,效果圖:

開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖開源中國iOS客戶端學習——(十三)使用UIWebView控件布局視圖





附件:http://down.51cto.com/data/2362918
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博爱县| 宁强县| 轮台县| 闵行区| 武鸣县| 乌拉特中旗| 灌阳县| 南京市| 道真| 霍州市| 越西县| 东海县| 甘洛县| 阿拉善右旗| 琼海市| 娱乐| 二连浩特市| 江津市| 兴文县| 天全县| 和平县| 宣威市| 泰宁县| 上饶市| 繁峙县| 延庆县| 阿拉善右旗| 辽阳县| 景泰县| 南开区| 江油市| 虹口区| 礼泉县| 淮北市| 阿拉尔市| 柳江县| 上虞市| 连州市| 玉田县| 长汀县| 宁远县|