- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 UIWebView,并且已经在使用 webViewDidFinishLoad: 方法和一个在加载完成后执行的可选 block :
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
[super webViewDidFinishLoad:webView];
//... bunch of other code
if(self.webViewFinishLoadBlock != nil)
{
self.webViewFinishLoadBlock();
}
}
现在我正在处理一个更加复杂的加载页面和重定向序列,这使得上面的逻辑不够充分。我不想将自己注册为 dummyWebView 的委托(delegate),并且不得不处理存储在我的 View Controller 属性中的多个完成 block :
dummyWebView = [[UIWebView alloc] initWithFrame:CGRectZero];
[dummyWebView loadRequest:[NSURLRequest requestWithURL:logoutURL]];
//Ideally here I would know when dummyWebView finishes loading, because there's some code I want to execute once it is done
我的问题是:
是否有某种第三方框架允许我使用 loadRequest:withCompletion:
来简化回调代码的编写?
最佳答案
你可以:
UIWebView
的子类,具有保存 webViewDidFinish
完成 block 的属性;
确保它指定了它的委托(delegate);
像您编写的那样实现 webViewDidFinish
(尽管我建议该 block 同时返回 Web View 和 NSError
对象,如果有的话) );和
也实现 webView:didFailLoadWithError:
。
因此:
// MyWebView.h
#import <UIKit/UIKit.h>
typedef void(^WebViewFinishLoadBlock)(UIWebView *, NSError *);
@interface MyWebView : UIWebView
@property(nonatomic, copy) WebViewFinishLoadBlock webViewFinishLoadBlock;
- (void)loadRequest:(NSURLRequest *)request withCompletionHandler:(WebViewFinishLoadBlock)completionHandler;
@end
和
// MyWebView.m
#import "MyWebView.h"
@interface MyWebView () <UIWebViewDelegate>
@end
@implementation MyWebView
- (void)loadRequest:(NSURLRequest *)request withCompletionHandler:(WebViewFinishLoadBlock)completionHandler
{
self.delegate = self;
self.webViewFinishLoadBlock = completionHandler;
[self loadRequest:request];
}
#pragma mark - UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (self.webViewFinishLoadBlock) {
self.webViewFinishLoadBlock(webView, nil);
self.webViewFinishLoadBlock = nil;
}
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
if (self.webViewFinishLoadBlock) {
self.webViewFinishLoadBlock(webView, error);
self.webViewFinishLoadBlock = nil;
}
}
@end
然后:
MyWebView *webView = [[MyWebView alloc] init];
webView.frame = self.view.bounds;
[self.view addSubview:webView];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request withCompletionHandler:^(UIWebView *webView, NSError *error) {
if (error) {
NSLog(@"failed: %@", error);
} else {
NSLog(@"succeeded");
}
}];
关于iOS 如何向 UIWebView loadRequest :? 添加完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26531345/
我已经阅读了 UIWebView 上的内容,但找不到在调用 loadRequest 时是否可以阻止线程(如 NSURL 可以)的具体答案。我听说有一个特定的 UIWebView 线程,所有 UIWeb
在我的应用程序中,我使用 Webview 根据用户的首选语言加载网站的不同版本。为此使用 WebFrame 的 loadRequest 方法 - [[aWebView mainFrame] loadR
我正在使用UIWebView播放.mp3文件。使用Safari是因为它为我提供了无需附加代码的音频控件,而且我看不到如何使用AVPlayer进行操作。它很简单,除了一个异常(exception),效果
我有 2 个类,UIViewController 类型的 MainViewController 和 UIView 类型的 Foo。 在 MainViewController 中,我实现了一个名为 my
当我使用UIWebView使用loadRequest显示网页时,有时网络不稳定,这是一个耗时的事情,所以我想随意取消loadRequest,怎么办? 最佳答案 只要打电话 [myWebView sto
我创建了一个 UIWebView 并调用了 [webview loadRequest:url]。当 webview 没有父 View /父 View 时,[webview isLoading] 不断返
所以我正在尝试将一个简单的 URL (http://www.google.com) 加载到 WebView 中。我在我正在使用的应用程序中有这个,但将其归结为一个基本应用程序以删除其他变量。我有一个绝
我的目标是在 webView 仍在从服务器获取数据时做一个事件指示器 但我似乎无法找到这样做的方法。我能想到的唯一方法是关闭,但如何关闭? 如果我不添加任何事件指示器,那么它将只是空白屏幕,然后在一段
我的应用程序中有一个 UIWebView, -(void)viewDidLaod{ NSURL *url = [NSURL URLWithString:@"some url string"];
在我的 Controller 中,我调用了 WKWebViewInstance.loadRequest(url)。如果没有可用的互联网,我想在 WKWebView 中加载一条错误消息。 我发现了
如何将以下内容转换为使用“loadRequest”而不是“loadHTMLString”? 我需要添加一个 HTTP header ,我发现的唯一方法是将 loadRequest 与 NSMutabl
我正在尝试使用 UIWebView 在我的应用程序中嵌入网站的移动版本。但是,当我执行以下操作时: NSURL *url = [NSURL URLWithString:webLink]; NSMuta
在我的应用程序中,我尝试使用 WebView(不可见)导航到给定的 URL。但是,加载 Web 内容是异步发生的。对于以后的处理,我需要它来等待所有 Web 内容加载(包括重定向)。 我尝试使用 CF
我有一个 UIWebView,其中的内容被缩放以适合。然后调整 webview 的大小以适应内容(见下文),并按预期工作。 webview 也有一个滑动手势来加载新页面 - 当在 webview 上为
我正在按照 this 创建一个 webView 应用程序教程。我完全按照所有步骤操作,但出现此错误: No visible @interface 'UIView' declares the selec
我正在使用 UIWebView,并且已经在使用 webViewDidFinishLoad: 方法和一个在加载完成后执行的可选 block : -(void)webViewDidFinishLo
我有一个 UIWebView,我想将 SVG 图像加载到其中。该文件的内容是纯 SVG,即 ... .该文件可以很好地加载到普通和移动 Safari 中,也可以使用 loadRequest 在 UIW
我希望能够使用我的 UIWebView loadRequest 方法发送一些额外的 header 。 我试过: NSMutableURLRequest *req = [NSMutableURLRequ
我已经阅读了有关 UIWebView 的很多泄漏问题,但我的情况非常简单,所以我决定提出一个新问题。当我尝试从 WebView loadRequest 方法加载文件时,如果我在 Instruments
我正在尝试使用 Objective C 中的 webView 加载 URL。我尝试了“https://www.tidecleaners.com/cincinati-pricing ”,它适用于所有设备
我是一名优秀的程序员,十分优秀!