跨不同的viewControllers使用相同的UIWebView
TL; DR:我需要实现跨多个ViewController共享的单例UIWebVIew。 这个问题包含了我所有的方法。
的appDelegate:
@property (strong, nonatomic) UIWebView *singleWebView;
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; }
PostsShowViewController
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; [self.viewContainer addSubview: appDelegate.singleWebView]; }
在第一个视图控制器中,我加载了我的单页应用程序,该应用程序首先显示post列表。 然后,用户查看其中一个post,他将被redirect到第二个视图控制器。 我想重用在第二个ViewController的第一个ViewController中使用的UIWebView,所以我不必重新加载网页。
问题是,在addSubview
后UIWebView似乎并没有加载。 我只看到一个我用作容器的UIView
。 如果你能给我一些debugging点,这将是非常有帮助的。
我终于想通了。 即使在从FirstViewController
删除UIWebView
实例后,保留计数始终为2。 我从故事板中删除了UIWebView
,并在加载firstViewController
时以编程方式创build它。 我把所有的东西都留下了。 最后我可以开始重用webView
。