После некоторого копания я обнаружил, что QLPreviewController
использует UIWebView
внизу и вызывает loadRequest:
для загрузки запрошенного файла.
Другой способ выполнить то, что вы хотите, - это сделатьчастную категорию на UIWebView
, и используйте метод swizzling для переопределения метода loadRequest:
, и вместо этого вызовите метод loadData:MIMEType:textEncodingName:baseURL:
.
Остерегайтесь, что :
1) В сценариях с нехваткой памяти (т.е. больших файлов) появляется черный экран с «Ошибка при загрузке документа», если это касается вас.(Неподтвержденный QLPreviewController знает, как очень хорошо справляться с этими сценариями и представлять документ).
2) Я не уверен, что Apple собирается одобрить этот вид взлома, хотя здесь не используются частные API.
код:
@implementation UIWebView (QLHack)
- (void)MyloadRequest:(NSURLRequest *)request
{
// Check somehow that it's the call of your QLPreviewController
// If not, just call the original method.
if (!insideQLPreviewController)
{
// Call original implementation
[self MyloadRequest:request];
}
else
{
// Load the real data you want
[self loadData:data MIMEType:mimeType textEncodingName:nil baseURL:someURL];
}
}
+ (void)load
{
method_exchangeImplementations(class_getInstanceMethod(self, @selector(loadRequest:)), class_getInstanceMethod(self, @selector(MyloadRequest:)));
}
@end