ios 本地html 图片,带有本地图像文件的iOS WebView远程html

本文详细介绍了如何在iOS应用中创建并使用自定义NSURLProtocol,通过子类化并传递预先打包的image1.png资源到本地HTML文件中,展示了从头到尾的代码实现过程。适合iOS开发者学习URL加载和协议扩展。
摘要由CSDN通过智能技术生成

好的这里是一个如何子类化NSURLProtocol并传递已经在捆绑中的图像(image1.png)的示例。下面是子类的标题,实现以及如何在viewController(不完整的代码)和本地html文件(可以与远程文件轻松交换)中使用它的示例。我已经调用了自定义协议:myapp://,您可以在底部的html文件中看到。

谢谢你的提问!我在很长一段时间里都在问这个问题,所以花时间计算出来的时间值得每一秒。

修改强>

如果有人在我目前的iOS版本下运行代码时遇到困难,请查看sjs的答案。当我回答这个问题时,它正在工作。他指出了一些有用的补充并纠正了一些问题,所以也给他道具。

这就是它在我的模拟器中的样子:

I7kUC.png

MyCustomURLProtocol.h 强>

@interface MyCustomURLProtocol : NSURLProtocol

{

NSURLRequest *request;

}

@property (nonatomic, retain) NSURLRequest *request;

@end

MyCustomURLProtocol.m 强>

#import "MyCustomURLProtocol.h"

@implementation MyCustomURLProtocol

@synthesize request;

+ (BOOL)canInitWithRequest:(NSURLRequest*)theRequest

{

if ([theRequest.URL.scheme caseInsensitiveCompare:@"myapp"] == NSOrderedSame) {

return YES;

}

return NO;

}

+ (NSURLRequest*)canonicalRequestForRequest:(NSURLRequest*)theRequest

{

return theRequest;

}

- (void)startLoading

{

NSLog(@"%@", request.URL);

NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[request URL]

MIMEType:@"image/png"

expectedContentLength:-1

textEncodingName:nil];

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];

NSData *data = [NSData dataWithContentsOfFile:imagePath];

[[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];

[[self client] URLProtocol:self didLoadData:data];

[[self client] URLProtocolDidFinishLoading:self];

[response release];

}

- (void)stopLoading

{

NSLog(@"something went wrong!");

}

@end

MyCustomProtocolViewController.h 强>

@interface MyCustomProtocolViewController : UIViewController {

UIWebView *webView;

}

@property (nonatomic, retain) UIWebView *webView;

@end

MyCustomProtocolViewController.m 强>

...

@implementation MyCustomProtocolViewController

@synthesize webView;

- (void)awakeFromNib

{

self.webView = [[[UIWebView alloc] initWithFrame:CGRectMake(20, 20, 280, 420)] autorelease];

[self.view addSubview:webView];

}

- (void)viewDidLoad

{

// ----> IMPORTANT!!! :)

[NSURLProtocol registerClass:[MyCustomURLProtocol class]];

NSString * localHtmlFilePath = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"html"];

NSString * localHtmlFileURL = [NSString stringWithFormat:@"file://%@", localHtmlFilePath];

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:localHtmlFileURL]]];

NSString *html = [NSString stringWithContentsOfFile:localHtmlFilePath encoding:NSUTF8StringEncoding error:nil];

[webView loadHTMLString:html baseURL:nil];

}

file.html 强>

we are loading a custom protocol

image?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值