【问题标题】:iOS UIWebViewDelegates not called未调用 iOS UIWebViewDelegates
【发布时间】:2015-03-03 21:52:51
【问题描述】:

我有一个名为WebScreenViewControllerUIViewController 类,它有一个UIWebView。这是类的实现文件:

@implementation WebScreenViewController

@synthesize urlString;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.webView.delegate = self;
    // Do any additional setup after loading the view.
    [self gotoUrl:self.urlString];
    //[self gotoUrl:@"http://www.google.com"];

}


#pragma mark - UIWebView Delegates
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

    NSURL* url = [request URL];
    NSString* urlStr = url.absoluteString;
    NSLog(@"shouldStartLoadWithRequest. URLStr = %@", urlStr);

    return YES;
}
-(void)webViewDidStartLoad:(UIWebView *)webView
{
    NSLog(@"webViewDidStartLoad");
}
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString* html = [webView stringByEvaluatingJavaScriptFromString:@"document.body"];
    NSLog(@"webViewDidFinishLoad: HTML string = %@", html);

}
-(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"didFailLoadWithError. ERROR: %@", error);
}

#pragma mark - Member Methods

-(void)gotoUrl:(NSString*)urlStr
{
    NSLog(@"Calling website %@ in UIWebView...", urlStr);
    NSURL* url = [NSURL URLWithString:urlStr];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:urlRequest];
}

@end

上面的代码在我的一个测试设备上运行良好,但在另一个测试设备上却不行。它在我的最新 iOS 8.1.2 的 iPod Touch 上运行。但它不适用于装有 iOS 7.0 的 iPad3。当我在 iPad3 上运行它时,它会调用 gotoUrl: 方法并显示日志“Calling website %@ in UIWebView...”。就是这样。我不再收到代表的日志。为了检查互联网连接,我尝试在同一台设备上使用 Safari,它可以正常工作。

【问题讨论】:

  • 您是否检查了 [gotoUrl:] 中的 self.webview 是否为空?
  • 在设置委托之前首先检查它是否被初始化。如果它为空,那么首先初始化它然后设置它的委托。
  • 好吧,就像我说的,上面的代码在我的 iPod 中使用时可以正常工作。意思是,所有的 NSLog 都正确打印出来。问题是如果我在我的 iPad 上运行它,它将无法工作。所以我不知道它有什么问题,它无法在具有不同操作系统的不同设备上工作。

标签: ios objective-c iphone uiwebview uiwebviewdelegate


【解决方案1】:
NSString * strURL = [NSString stringWithFormat:@"http://www.google.com/"];
NSURL *loadURL=[NSURL URLWithString:strURL];
NSURLRequest *loadRequest = [NSURLRequest requestWithURL:loadURL];
[webView loadRequest:loadRequest];
webView.delegate=self;

在您的视图中尝试这种方式确实加载,或者如果您有 URL,您可以像这样替换第一行

NSString * strURL = [NSString stringWithFormat:self.urlString];

【讨论】:

    【解决方案2】:

    如果您在 iPhone 和 iPad 上使用不同的故事板,请检查您是否在 iPad 故事板中正确连接了 Web 视图的出口。

    还要检查 web 视图是否不为零。

    希望这会有所帮助..

    【讨论】:

    • 就像我在上面的评论中所说的那样,它实际上在我的一个设备上工作,但在另一个设备上却不行。所以也许不是因为这个。还是谢谢。
    猜你喜欢
    • 2014-09-26
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多