我有一个主表和详细视图控制器。详细信息VC通过Web视图显示URL。
如果使用主/详细设置的内置导航,如果我返回然后按其他表格单元格,详细信息视图将更新Web视图。无论我使用的是UIWebView
还是WKWebView
,都是如此。
但是,在详细信息视图中,无需返回到表格,我希望为用户提供通过同一Web视图查看多个URL的选项。我试图通过更改请求的URL来在viewwillappear中执行此操作。但是,UIWebView
(或WKWebView
)继续显示相同的网址。我似乎无法摆脱第一个网址。
我已经尝试了各种方法来关闭或停止现有的Web视图,清除缓存,删除cookie等,然后重新加载新的,但仍然看到相同的URL。将不胜感激任何建议。这是我的代码和我尝试过的一些不起作用的东西:
-(void) changeURL: (NSNumber*)param {
NSURL *testurl1=[NSURL URLWithString:@"http://www.apple.com"];
NSURL *testurl2 =[NSURL URLWithString:@"http://www.google.com"];
//if param is 1 {
_urlToLoad = testurl1;}
else {
_urlToLoad = testurl2;}
}
Edit: Method below is updateInterface, not viewWillAppear
-(void) updateInterface {
UIWebView *webView;
NSURLRequest *request=[NSURLRequest requestWithURL:_urlToLoad];
webView = nil;//This blocks the web view from loading at all for some reason I can't understand. Setting wkWebView to nil does not block loading.
[webView stopLoading];//no effect
[webView loadRequest:request];
[[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
NSString *myDomain = @"www.google.com";
for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
if([[cookie domain] isEqualToString:myDomain]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
//wkwebview version
WKWebView *wkwebView;
WKWebViewConfiguration *wkConfig = [[WKWebViewConfiguration alloc] init];
wkwebView = nil;
wkwebView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:wkConfig];
wkwebView.navigationDelegate = self;
[wkwebView loadRequest:request];
[webView addSubview:wkwebView];
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webFrame.origin.y = 100.0; // statusbar
webFrame.origin.y -= 100.0; // statusbar 20 px cut from y of frame
webView = [[UIWebView alloc] initWithFrame:webFrame];
}
答案 0 :(得分:1)
UIViewController
方法" viewWillAppear"在Objective-C中有以下签名:
- (void)viewWillAppear:(BOOL)animated
,你没有任何参数实现它。
结果是,它不是被视为超类UIViewController
中定义的原始方法的覆盖,而是被视为子类引入的全新的自定义方法;除非你在某处明确地调用它,否则它永远不会执行。