俄罗斯贵宾会 > 编程 > 俄罗斯贵宾会iOS UIWebView 的加载
俄罗斯贵宾会iOS UIWebView 的加载

刚接触IOS开荒1年多,以后对于 混合式 移动端支出非常红,因为开拓开销上、速度上都比古板的APP开辟要好,混合式开采是古板形式与PC网页端相结合的方式。那么涉及了 应用软件的犬牙交错格局开荒,在Android开采中有WebView作为混合形式开辟的桥梁,当然在IOS中也一律有一个UIWebView 组件来作为混合格局开荒的桥梁,那么下边就对UIWebView的一部分基本知识安详严整一下。

一、UIWebView的底蕴运用

1、创建UIWebView:

CGRect bouds = [[UIScreen manScreen]applicationFrame]; UIWebView* webView = [[UIWebView alloc]initWithFrame:bounds];

2、设置属性:

webView.scalespageToFit = YES;//自动对页面进行缩放以适应屏幕webView.detectsPhoneNumbers = YES;//自动物检疫查评定网页上的电话号码,单击能够拨打

3、呈现网页视图UIWebView:

[self.view addSubview:webView];

4、加载内容

NSURL* url = [NSURL URLWithString:@" NSURLRequest* request = [NSURLRequest requestWithURL:url];//创建NSURLRequest [webView loadRequest:request];//加载

也能够加载七个地面能源:

NSURL* url = [NSURL fileURLWithPath:filePath];//创建URL NSURLRequest* request = [NSURLRequest requestWithURL:url];//创建NSURLRequest [webView loadRequest:request];//加载

UIWebView 还援救将叁个NSString对象作为源来加载。你可感到其提供三个功底ULacrosseL,来教导UIWebView对象怎么着跟随链接和加载远程能源:

[webView loadHTMLString:myHTML baseURL:[NSURL URLWithString:@"];

5、导航

UIWebView类内部会处理浏览器的导航动作,通过goForward和goBack方法您能够调控发展与后退动作:

[webView goBack]; [webView goForward]; [webView reload];//重载 [webView stopLoading];//撤除载入内容

6、UIWebViewDelegate委托代理

UIWebView帮助一组织委员会委员托方法,那个方法就要特定时期获得照应。要运用这么些点子,必需先设定webView的委托:

webView.delegate = self;

下面各类委托方法的首先个参数皆以指向三个UIwebview的指针,由此你可以将四个寄托用于多少个网页视图。

-webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*State of Qatar reuqest navigationType: (UIWebViewNavigationType卡塔尔navigationType;//当网页视图被指令载入内容而获得布告。应当重返YES,那样博览会开加载。通过导航类型参数能够赢得需要发起的案由,能够是以下跋扈值: UIWebViewNavigationTypeLinkClicked UIWebViewNavigationTypeFormSubmitted UIWebViewNavigationTypeBackForward UIWebViewNavigationTypeReload UIWebViewNavigationTypeFormResubmitted UIWebViewNavigationTypeOther

UIWebView控件加载网页的监听函数方法:

-webViewDidStartLoad:(UIWebView*卡塔尔(قطر‎webView ;//当网页视图已经起来加载二个央求后,获得文告。 -webViewDidFinishLoad:(UIWebView*State of QatarwebView ;//当网页视图甘休加载一个呼吁之后,取得关照。 -webView:(UIWebView*卡塔尔国webView DidFailLoadWithError:error;//当在伏乞加载中生出错误时,得到布告。会提供二个NSSError对象,以标志所发出错误类型。

以上是IOS中UIWebView的底蕴运用要点详细解释,接下去一些UIWebView的常用注意点。

二、IOS中UIWebView常用注意点:

1、与UIWebView实行相互,调用web页面中的需求传参的函数时,参数要求带单引号,可能双引号(双引号要求打开转义在转义字符前加),在传递json字符串时无需加单引号或双引号:

-webViewDidFinishLoad:(UIWebView *)webView{NSString *sendJsStr=[NSString stringWithFormat:@"openFile",jsDocPathStr];[webView stringByEvaluatingJavaScriptFromString:sendJsStr];}

2、在该代理方法中判定与webView的并行,可经过html里定义的情商落到实处:

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

3、独有在webView加载完结之后在能够调用对应页面中的js方法。.

4、为webView增加背景图片:

approvalWebView.backgroundColor=[UIColor clearColor];approvalWebView.opaque=NO;//那句话很要紧,webView是还是不是是不透明的,no为透明 在webView下增添个imageView体现图片就足以了

5、获取webView页面内容消息:

NSString *docStr=[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"];//获取web页面内容音信,此处获取的是个json字符串SBJsonParser *parserJson=[[[SBJsonParser alloc]init]autorelease];NSDictionary *contentDic=[parserJson objectWithString:docStr];//将json字符串转变为词典

6、 加载当麻芋果件的法门:

//第一种形式:NSString* path = [[NSBundle mainBundle] pathForResource:name ofType:@"html" inDirectory:@"mobile"];//mobile是根目录,name是文件名称,html是文件类型[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]]; //加载当麻芋果件//第三种艺术:NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; NSString *filePath = [resourcePath stringByAppendingPathComponent:@"mobile.html"]; NSString *htmlstring=[[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; [uiwebview loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

7、将文件下载到当地址然后再用webView打开:

NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];self.filePath = [resourceDocPath stringByAppendingPathComponent:[NSString stringWithFormat:@"maydoc%@",docType]];NSData *attachmentData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:theUrl]];[attachmentData writeToFile:filePath atomically:YES];NSURL *url = [NSURL fileURLWithPath:filePath];NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];[attachmentWebView loadRequest:requestObj];//删除钦点目录下的文书NSFileManager *magngerDoc=[NSFileManager defaultManager];[magngerDoc removeItemAtPath:filePath error:nil];

8、管理webView呈现txt文书档案乱码难点:

if ([theType isEqualToString:@".txt"]){//txt分带编码和不带编码三种,带编码的如UTF-8格式txt,不带编码的如ANSI格式txt//不带的,可以依次尝试GBK和GB18030编码NSString* aStr = [[NSString alloc] initWithData:attachmentData encoding:NSUTF8StringEncoding];if {//用GBK进行编码aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000632];}if {//用GBK编码不行,再用GB18030编码aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000631];}//通过html语言举行制版NSString* responseStr = [NSString stringWithFormat:@"""""""""""

"

"%@"

"/pre>"

""

"",

aStr];

[attachmentWebView loadHTMLString:responseStr baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

return;

}

9、使用webView加载本地或互联网文件整个流程:

1、Loading a local PDF file into the web view

- viewDidLoad {

[super viewDidLoad];

//从本地加载

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"iPhone_User_Guide" ofType:@"pdf"];

if {

NSData *pdfData = [NSData dataWithContentsOfFile:thePath];

[(UIWebView *)self.view loadData:pdfData MIMEType:@"application/pdf"

textEncodingName:@"utf-8" baseURL:nil];

}

//从互连网加载

[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"];

}

2、The web-view delegate managing network loading

- webViewDidStartLoad:(UIWebView *)webView

{

// starting the load, show the activity indicator in the status bar

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

}

- webViewDidFinishLoad:(UIWebView *)webView

{

// finished loading, hide the activity indicator in the status bar

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}

- webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

{

// load error, hide the activity indicator in the status bar

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

// report the error inside the webview

NSString* errorString = [NSString stringWithFormat:

@"

An error occurred:

%@

",

error.localizedDescription];

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

}

3、Stopping a load request when the web view is to disappear

- viewWillDisappear:animated

{

if ( [self.myWebView loading] ) {

[self.myWebView stopLoading];

}

self.myWebView.delegate = nil; // disconnect the delegate as the webview is hidden

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}

/************/

援用自苹果官方文书档案(displaying web content)

10、查找webView中的scrollview:

- addScrollViewListener

{

UIScrollView* currentScrollView;

for (UIView* subView in self.webView.subviews) {

if ([subView isKindOfClass:[UIScrollView class]]) {

currentScrollView = (UIScrollView*)subView;

currentScrollView.delegate = self;

}

}

}

11、去掉webView的影子,做成近似scrollView:

- clearBackgroundWithColor:color

{

// 去掉webview的阴影

self.backgroundColor = color;

for (UIView* subView in [self subviews])

{

if ([subView isKindOfClass:[UIScrollView class]]) {

for (UIView* shadowView in [subView subviews])

{

if ([shadowView isKindOfClass:[UIImageView class]]) {

[shadowView setHidden:YES];

}

}

}

}

}

12、撤废长按webView上的链接弹出actionSheet的标题:

-webViewDidFinishLoad:(UIWebView *)webView

{

[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout = 'none';"];

}

13、废除webView上的一流链接加载难题:

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

{

if (navigationType==UIWebViewNavigationTypeLinkClicked) {

return NO;

}

else {

return YES;

}

}

14、webView在ios5.1事情发生早前的bug:在后边的工程中利用webView加载附属类小零器件,webView补助doc,excel,ppt,pdf等格式,但那个附属类小构件必得先下载到本地然后在加载到webView上才得以显得,

当附属类小零件下载到本地之后刚刚开首加载到webView上时,那时候淡出附属类小零部件页面会产生程序崩溃。会崩溃是由于webView控件内部未有把有关代理废除掉,所以引致退出之后先后崩溃。

webView在5.1上的bug:以前项目必要要webView能够左右运动,但在往webView上加载页面时形成页面加载不全,那几个bug是出于webView本身的缓存所致。

15、在运用webView举行搜狐腾讯网分享时,webView会自动保存登入的cookie导致品种中的分享模块有个别标题,删除 webView的cookie的艺术:

-deleteCookieForDominPathStr:(NSString *)thePath

{

//删除本地cookie,thePath为cookie路线通过打字与印刷cookie可驾驭其路线

for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {

if([[cookie domain] isEqualToString:thePath]) {

[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];

}

}

}

16、在UIWebView中使用flashScrollIndicators

使用UIScrollView时,大家可以应用flashScrollIndicators方法展现滚动标记然后消失,告知客商此页面能够滚动,前面还应该有更加多内容。UIWebView内部依靠于UIScrollView,不过其未有flashScrollIndicators方法,但足以经过别的路径使用此办法,如下所示。

for (id subView in [webView subviews])

{ if ([subView respondsToSelector:@selector(flashScrollIndicators)])

{

[subView flashScrollIndicators];

}

}

上述代码片段能够到webViewDidFinishLoad回调中运用,加载完网页内容后flash显示滚动标志。 17、依据剧情得到UIWebView的惊人:

不时须要基于差异的原委调节UIWebView的惊人,以使UIWebView无独有偶装下全数故事情节,不用拖动,后边也不会留白。有二种艺术可依赖加载内容获取UIWebView的适宜中度,但都供给在网页内容加载成功后才得以,即供给在webViewDidFinishLoad回调中利用

①.使用sizeThatFits方法。

- webViewDidFinishLoad:(UIWebView *)webView

{

CGRect frame = webView.frame;

frame.size.height = 1;

webView.frame = frame;

CGSize fittingSize = [webView sizeThatFits:CGSizeZero];

frame.size = fittingSize;

webView.frame = frame;

}

sizeThatFits方法有个难题,要是当前UIView的深浅比刚刚合适的深浅还大,则赶回当前的轻重,不会重返最合适的大小值,所以使用sizeThatFits前,先将UIWebView的莫斯中国科学技术大学学设为最小,即1,然后再接受sizeThatFits就能够回去正巧合适的大大小小。

②、使用JavaScript

- webViewDidFinishLoad:(UIWebView *)webView

{ CGRect frame = webView.frame;

NSString *fitHeight = [webview stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];

frame.size.height = [fitHeight floatValue];

webView.frame = frame;

总结:

率先 对IOS开采中的UIWebView控件的中坚使用举办起头的安详严整,提到了创造、设置属性、设置背景、怎样

加载网页内容等一多元的底蕴点,然后解说使用UIWebView控件时常用用注意点,平常须求利用的地点,需要静心

的地点,使得对开辟ios APP混合格局的大桥---UIWebView控件更加的垂询、熟识。UIWebView不仅能够加载服务器

提供的ULacrosseI,又能够加载本地的能源文件,还可以够加载服务器再次来到的网页分界面代码,综上说述UIWebView是何其强

大的一控件桥梁,以往在付出中应用到的地点会越多。

上一篇:截取视频当前时间的一帧图片 下一篇:没有了
返回列表