在不同的viewControllers中使用相同的UIWebView

Max*_*s S 12 objective-c uiwebview ios swift

TL; DR:我需要实现在多个ViewControllers之间共享的单例UIWebVIew.这个问题包含了我迄今为止的所有方法.

的appDelegate:

@property (strong, nonatomic) UIWebView *singleWebView;
Run Code Online (Sandbox Code Playgroud)

firstViewController:

@property (weak, nonatomic) IBOutlet UIWebView *webView;

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear: animated];
    NSLog(@"Removing webview from the first VC");

    [self.webView removeFromSuperview];
    self.webView.delegate = nil;

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.singleWebView = self.webView;

    self.webView = nil;
}

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    NSURL *URL = [request URL];

    if ([[URL absoluteString] isEqualToString:@"myapp://postsShow"]) {
        [self performSegueWithIdentifier:@"postsShowSegue" sender:self];
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

PostsShowViewController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [self.viewContainer addSubview: appDelegate.singleWebView];
}
Run Code Online (Sandbox Code Playgroud)

在第一个视图控制器中,我加载了我的单页应用程序,它首先显示了帖子列表.然后,用户查看其中一个帖子,他将被重定向到第二个视图控制器.我想重用第二个ViewController中第一个ViewController中使用的UIWebView,所以我不必重新加载网页.

问题是,在addSubview似乎没有加载UIWebView 之后.我只看到一个UIView用作容器的东西.如果你能给我一些调试点,那将是非常有帮助的.

在此输入图像描述

Max*_*s S 2

我终于想通了。保留计数始终为 2,即使在我UIWebViewFirstViewController. 我UIWebView从故事板中删除了 ,并在firstViewController加载时以编程方式创建了它。我让其他一切保持不变。最后我可以开始重用webView.