IOS / Objective-C:在详细信息视图控制器

时间:2017-07-25 15:07:40

标签: ios objective-c uiwebview wkwebview

我有一个主表和详细视图控制器。详细信息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];
           }

1 个答案:

答案 0 :(得分:1)

UIViewController方法" viewWillAppear"在Objective-C中有以下签名:

- (void)viewWillAppear:(BOOL)animated

,你没有任何参数实现它。

结果是,它不是被视为超类UIViewController中定义的原始方法的覆盖,而是被视为子类引入的全新的自定义方法;除非你在某处明确地调用它,否则它永远不会执行。

来源:SDK Reference