1. 程式人生 > >iOS中UIWebView的使用詳解及利用webview實現圖文混排例項

iOS中UIWebView的使用詳解及利用webview實現圖文混排例項

iOS中UIWebView的使用詳解

一、初始化與三種載入方式

     UIWebView繼承與UIView,因此,其初始化方法和一般的view一樣,通過alloc和init進行初始化,其載入資料的方式有三種:

第一種:

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

這是載入網頁最常用的一種方式,通過一個網頁URL來進行載入,這個URL可以是遠端的也可以是本地的,例如我載入百度的主頁:

    UIWebView * view = [[UIWebView alloc]initWithFrame:self.view.frame];
    [view loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
    [self.view addSubview:view];

會得到如下的效果:

第二種:

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;

這個方法需要將httml檔案讀取為字串,其中baseURL是我們自己設定的一個路徑,用於尋找html檔案中引用的圖片等素材。

第三種:

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

這個方式使用的比較少,但也更加自由,其中data是檔案資料,MIMEType是檔案型別,textEncodingName是編碼型別,baseURL是素材資源路徑。


二、一些常用的屬性和變數

@property (nonatomic,assign)id <UIWebViewDelegate> delegate;設定webView的代理

@property (nonatomic,readonly,retain)UIScrollView *scrollView;內建的scrollView

@property (nonatomic,readonly,retain)NSURLRequest *request;URL請求

- (void)reload;重新載入資料

- (void)stopLoading;停止載入資料


- (void)goBack;返回上一級

- (void)goForward;跳轉下一級

@property (nonatomic,readonly,getter=canGoBack)BOOL canGoBack;獲取能否返回上一級

@property (nonatomic,readonly,getter=canGoForward)BOOL canGoForward;獲取能否跳轉下一級

@property (nonatomic,readonly,getter=isLoading)BOOL loading;獲取是否正在載入資料

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;通過javaScript操作web資料

@property (nonatomic)BOOL scalesPageToFit;設定是否縮放到適合螢幕大小

@property (nonatomic)UIDataDetectorTypes dataDetectorTypesNS_AVAILABLE_IOS(3_0);設定某些資料變為連結形式,這個列舉可以設定如電話號,地址,郵箱等轉化為連結

@property (nonatomic)BOOL allowsInlineMediaPlaybackNS_AVAILABLE_IOS(4_0);設定是否使用內聯播放器播放視訊

@property (nonatomic)BOOL mediaPlaybackRequiresUserActionNS_AVAILABLE_IOS(4_0);設定視訊是否自動播放

@property (nonatomic)BOOL mediaPlaybackAllowsAirPlayNS_AVAILABLE_IOS(5_0);設定音訊播放是否支援ari play功能

@property (nonatomic)BOOL suppressesIncrementalRenderingNS_AVAILABLE_IOS(6_0);設定是否將資料載入如記憶體後渲染介面

@property (nonatomic)BOOL keyboardDisplayRequiresUserActionNS_AVAILABLE_IOS(6_0);設定使用者互動模式

三、iOS7中的一些新特性

下面這些屬性是iOS7之後才有的,通過他們可以設定更加有趣的web體驗

@property (nonatomic)UIWebPaginationMode paginationModeNS_AVAILABLE_IOS(7_0);

    typedef NS_ENUM(NSInteger, UIWebPaginationMode) {
        UIWebPaginationModeUnpaginated,//不使用翻頁效果
        UIWebPaginationModeLeftToRight,//將網頁超出部分分頁,從左向右進行翻頁
        UIWebPaginationModeTopToBottom,//將網頁超出部分分頁,從上向下進行翻頁
        UIWebPaginationModeBottomToTop,//將網頁超出部分分頁,從下向上進行翻頁
        UIWebPaginationModeRightToLeft//將網頁超出部分分頁,從右向左進行翻頁
    };

這個屬性用來設定一種模式,當網頁的大小超出view時,將網頁以翻頁的效果展示,列舉如下:

@property (nonatomic)CGFloat pageLengthNS_AVAILABLE_IOS(7_0);設定每一頁的長度

@property (nonatomic)CGFloat gapBetweenPagesNS_AVAILABLE_IOS(7_0);設定每一頁的間距

@property (nonatomic,readonly)NSUInteger pageCountNS_AVAILABLE_IOS(7_0);獲取分頁數

四、webView協議中的方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

準備載入內容時呼叫的方法,通過返回值來進行是否載入的設定

- (void)webViewDidStartLoad:(UIWebView *)webView;開始載入時呼叫的方法

- (void)webViewDidFinishLoad:(UIWebView *)webView;結束載入時呼叫的方法

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;載入失敗時呼叫的方法

例項:

2.下面看一下效果:


步驟:

0.建立兩個檢視控制體

建立一個新專案,然後建立兩個控制器LvesViewController和 LvesOriginalController

分別新增一個UIWebView到self.view上。

1.去除webView滾動時,上下的白邊。

- (void)clearWebViewBackground:(UIWebView *)webView
{
    UIWebView *web = webView;
    for (id v in web.subviews) {
        if ([v isKindOfClass:[UIScrollView class]]) {
            [v setBounces:NO];
        }
    }
}

2.設定代理

//2. 設定代理
    self.myWebView.delegate=self;

3.新增載入webview的檢視

#pragma mark 載入WebView
-(void) loadMyWebView{
NSString *[email protected]"韓寒《後會無期》奇葩的吸金3祕籍";

NSString *linkStr=[NSString stringWithFormat:@"<a href='%@'>我的部落格</a> <a href='%@'>原文</a>",@"http://blog.csdn.net/wildcatlele",@"http://jincuodao.baijia.baidu.com/article/26059"];

NSString *[email protected]"韓寒《後會無期》的吸金能力很讓我驚訝!8月12日影片票房已成功衝破6億大關。而且排片量仍保持10 以上,以日收千萬的速度穩步向七億進軍。";

NSString *[email protected]"要知道,《後會無期》不是主流型別片,是一個文藝片。不像《小時代》,是一個商業主流的偶像電影。";
NSString *image1=[NSString stringWithFormat:@"<img src='%@'  height='280' width='300' />",@"http://nvren.so/uploads/allimg/c140801/140DR4554L40-YB9.jpg"];
NSString *image2=[NSString stringWithFormat:@"<img src='%@'  height='280' width='300' />",@"http://f.hiphotos.baidu.com/news/w%3D638/sign=78315beeb1fb43161a1f797918a44642/2934349b033b5bb58cb61bdb35d3d539b600bcb5.jpg"];

NSString *[email protected]"太奇葩了!有人說,這是中國電影市場的紅利,是粉絲電影的成功。但是,有一部投資3000萬的粉絲電影《我就是我》,有明星,製作也不錯,基本上是慘敗。";

NSString *[email protected]"《後會無期》賣的不是好故事,是優越感。特別是針對80、90後的人群,你有沒有發現,看《後會無期》比看《小時代3》有明顯的優越感。故事雖然一般,但是很多人看完後,會在微博、微信上晒照片。所以說,對一個族群靠的不是廣度,而是深度。<br>\
\
很凶殘,值得大家借鑑。韓寒《後會無期》還有什麼祕密武器,歡迎《後會無期》團隊或相關方爆料,直接留言即可,有料的可以送黎萬強親筆簽名的《參與感》一書。";

//初始化和html字串
NSString *htmlURlStr=[NSString stringWithFormat:@"<body style='background-color:#EBEBF3'><h2>%@</h2><p>%@</p> <p>%@ </p>%@ <br><p> %@</p> <p>%@</p>%@<p>%@</p></body>",title,linkStr,p1,image1,p2,p3,image2,p4];

[self.myWebView loadHTMLString:htmlURlStr baseURL:nil];

}

4.實現代理方法,(處理連線點選事件)

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

NSString *urlStr=request.URL.absoluteString;

NSLog(@"url: %@",urlStr);

//為空,第一次載入本頁面
if ([urlStr isEqualToString:@"about:blank"]) {
return YES;
}

//設定點選後的檢視控制器
LvesOriginalController *originalC=[[LvesOriginalController alloc] init];
originalC.originUrl=urlStr; //設定請求連線
//跳轉到點選後的控制器並載入webview
[self.navigationController pushViewController:originalC animated:YES];

return  NO;
}
//設定底部滾動不彈回
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] intValue];
NSString* javascript = [NSString stringWithFormat:@"window.scrollBy(0, %d);", height];
[webView stringByEvaluatingJavaScriptFromString:javascript];

}

5.實現OrigainalViewController

//
//  LvesOriginalController.m
//  WebViewDemo
//
//  Created by Lves Li on 14-8-15.
//  Copyright (c) 2014年 Lves. All rights reserved.
//

#import "LvesOriginalController.h"

@interface LvesOriginalController ()
{
UIWebView *_webView;
}
@end

@implementation LvesOriginalController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
//設定title
[email protected]"原文";


_webView=[[UIWebView alloc] init];
_webView.frame=[[UIScreen mainScreen] bounds];

[self.view addSubview:_webView];

[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.originUrl]]];


}
@end





UIWebView儲存圖片

http://www.cocoachina.com/ios/20160616/16660.html

相關推薦

iOSUIWebView的使用利用webview實現圖文例項

iOS中UIWebView的使用詳解 一、初始化與三種載入方式      UIWebView繼承與UIView,因此,其初始化方法和一般的view一樣,通過alloc和init進行初始化,其載入資料的方式有三種: 第一種: - (void)loadRequest:(NSU

iOS-利用NSAttributedString實現圖文

UILabel 和 UITextView 都能新增 NSAttributedString 屬性字串,通過這一點,可以實現帶有屬性的文字和文字內包含圖片的文字內容展示. 效果如下:

利用NSAttributedString實現圖文

nes -s union ref and 代理方法 tag erl efault UILabel 和 UITextView 都能添加 NSAttributedString 屬性字符串,通過這一點,可以實現帶有屬性的文字和文字內包含圖片的文本內容展示. 效果如下: 1-

AndroidAlarmManager以及利用PendingIntent設定鬧鐘

AlarmManager是提供一種訪問系統鬧鐘服務的方式,允許你去設定在將來的某個時間點去執行你的應用程式。當你的鬧鐘響起(時間到)時,在它上面註冊的一個意圖(Intent)將會被系統以廣播發出,然後自動啟動目標程式,如果它沒有正在執行。註冊的鬧鐘會被保留即使裝置處於休眠中

pythonlist實現

list為python中的常用資料型別,其為python中內建類,繼承自object。接下來全面介紹list的常見方法及自己實現類list功能的類建立list建立空list​ list1 = [] ​ list2 = list()建立並初始化list​ l

影象處理梯度 gradient()函式

影象在計算機中以數字影象的形式儲存,即以數值矩陣的形式存在,形成了離散的數值訊號,在此基礎上,對於影象處理中的數值的多樣性計算分析也影響著初步影象分析。影象梯度的定義:影象函式f(x,y)在點(x,y)的梯度是一個具有大小和方向的向量,設為Gx 和 Gy 分別表示x方向和y方

JSCookie示例展示

Cookie的作用 cookie機制將資訊儲存於使用者硬碟,因此可以作為全域性變數,這是它最大的一個優點。它可以用於以下幾種場合。 (1)儲存使用者登入狀態。例如將使用者id儲存於一個cookie內,這樣當用戶下次訪問該頁面時就不需要重新登入了,現在很多

STLdeque與vector和list的區別

在前面已經向大家介紹了vector,vector是單向開口的連續性空間,deque則是一種雙向開口的連續線性空間。所謂雙向開口,意思是可以在頭尾兩端分別作為元素的插入和刪除操作。 deque是在功能上合併了vector和list。    優點:(1) 隨機訪問方便,即支援

資料結構之:AVL樹C++模板實現

AVL樹簡介AVL樹的名字來源於它的發明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL樹是最先發明的自平衡二叉查詢樹(Self-Balancing Binary Search Tree,簡稱平衡二叉樹)。一棵AVL樹有如下必要條件:條件一:它必

CSS進階(11)—— overflow屬性利用CSS實現錨點定位

  本章延續上一章BFC的內容深入探索BFC的最佳結界——overflow在其本職工作上的表現。   1.overflow的裁剪界線——border-box   overflow屬性用於指定塊容器元素的內容溢位時的表現方式——滾動,裁剪,自適應。“BFC

資料結構圖文解析之:二叉堆C++模板實現

0. 資料結構圖文解析系列 1. 二叉堆的定義 二叉堆是一種特殊的堆,二叉堆是完全二叉樹或近似完全二叉樹。二叉堆滿足堆特性:父節點的鍵值總是保持固定的序關係於任何一個子節點的鍵值,且每個節點的左子樹和右子樹都是一個二叉堆。 當父節點的鍵值總是大於或等於任何一個子節點的鍵值時為最大堆。 當父節點的鍵值總是小於

資料結構圖文解析之:哈夫曼樹與哈夫曼編碼C++模板實現

0. 資料結構圖文解析系列 1. 哈夫曼編碼簡介 哈夫曼編碼(Huffman Coding)是一種編碼方式,也稱為“赫夫曼編碼”,是David A. Huffman1952年發明的一種構建極小多餘編碼的方法。 在計算機資料處理中,霍夫曼編碼使用變長編碼表對源符號進行編碼,出現頻率較高的源符號採用較短的編碼,

RSA演算法C語言實現

1、什麼是RSA RSA公鑰加密演算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。1987年首次公佈,當時他們三人都在麻省理工學院工作。RSA就是他們

相簿選取圖片插入到EditText實現圖文

1.首先用到了 ImagePicker,上github搜尋仿微信圖片選擇就能找到 2.匯入ImagePicker的包 compile 'com.squareup.picasso:picasso:2.5.2' 3.我是用是 picasso載入圖片,github上imag

利用css進行圖文

<!doctype html> <html> <head> <meta charset="utf-8"> <title>圖片及文字的混排</title> <style stype="text/css"

JsJSON.stringify()與JSON.parse()與eval()使用案例

div 網絡 blog 處理 ive asc 還要 ava 不同 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。因為采用獨立於語言的文本格式,也使用了類似於C語言家族的習慣,擁有了這些特性使使JSON稱為理想的數據交換語言,作用

WebService的WSDL jmeter測試

images 包括 3.2 接口測試工具 types 通知 操作 sdl message 首先簡單講解一下什麽是wsdl. 一個WSDL文檔通常包含8個重要的元素,即definitions、types、import、message、portType、ope

NIGINX 的location上下文的參數用法

Nginx location配置參數詳解nginx中只支持三種請求轉發方式:round-robin(輪流調度方式):它是把客戶端流量請求依次按順序分發給每個後端服務器。缺點是:會出現某個服務器已經在 處理很多的請求而再有新的請求進來,nginx代理服務器還是會給它分發流量進來,這會導致服務器down掉。ip_

搜索系統所有以.repo結尾的文件並刪除(find命令xargs命令

搜索系統 輸入 最大的 tin fin pro 多個 term 傳遞參數 find / -name *.repo | xargs rm –rf //搜索以.repo結尾的文件並刪除 find命令詳解 精細查找文件或目錄d find [ 查找範圍 ]

JavaWebfilter的應用案例

轉載自:http://www.cnblogs.com/vanl/p/5742501.html 一:Filter介紹   Filter可認為是Servlet的一種“變種”,它主要用於對使用者請求(HttpServletRequest)進行預處理,也可以對伺服器響應(HttpServl