在不同的 viewController 中使用相同的 UIWebView
Using the same UIWebView across different viewControllers
TL;DR:我需要实现一个在多个 ViewController 之间共享的单例 UIWebVIew。 这个问题包含了我目前所有的方法。
appDelegate:
@property (strong, nonatomic) UIWebView *singleWebView;
先ViewController:
@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];
}
在第一个视图控制器中,我加载了我的单页应用程序,它首先显示了一个帖子列表。然后,用户查看其中一篇文章,他将被重定向到第二个视图控制器。我想 重用 在第二个 ViewController 中第一个 ViewController 中使用的 UIWebView,所以我不必 reload网页。
问题是,在 addSubview
之后,似乎没有加载 UIWebView。我只看到我用作容器的 UIView
。如果你能给我一些调试点,那将非常有帮助。
我终于明白了。保留计数始终为 2,即使在我从 FirstViewController
中删除 UIWebView
实例之后也是如此。我从故事板中删除了 UIWebView
并在加载 firstViewController
时以编程方式创建它。我让其他一切保持不变。最后我可以开始重用 webView
.
TL;DR:我需要实现一个在多个 ViewController 之间共享的单例 UIWebVIew。 这个问题包含了我目前所有的方法。
appDelegate:
@property (strong, nonatomic) UIWebView *singleWebView;
先ViewController:
@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];
}
在第一个视图控制器中,我加载了我的单页应用程序,它首先显示了一个帖子列表。然后,用户查看其中一篇文章,他将被重定向到第二个视图控制器。我想 重用 在第二个 ViewController 中第一个 ViewController 中使用的 UIWebView,所以我不必 reload网页。
问题是,在 addSubview
之后,似乎没有加载 UIWebView。我只看到我用作容器的 UIView
。如果你能给我一些调试点,那将非常有帮助。
我终于明白了。保留计数始终为 2,即使在我从 FirstViewController
中删除 UIWebView
实例之后也是如此。我从故事板中删除了 UIWebView
并在加载 firstViewController
时以编程方式创建它。我让其他一切保持不变。最后我可以开始重用 webView
.