【问题标题】:Don't reload UIWebView when View Controller is loaded second time第二次加载 View Controller 时不要重新加载 UIWebView
【发布时间】:2015-08-17 15:37:42
【问题描述】:

我有UIWebViewHomeViewController 中的一个按钮。

当点击这个按钮时,它会转到SettingViewController

但问题是,当我从SettingViewController 再次回到HomeViewController 时,它再次启动ViewDidLoad 并再次重新加载我不想要的UIWebView

即使再次加载 HomeViewController,我希望网页仍然存在。

提前谢谢你。

【问题讨论】:

  • 您是否创建了从HomeViewControllerSettingViewController 的segue?
  • 是的,我已经创建了从 HomeViewController 到 SettingViewController 的 segue

标签: ios multithreading uiwebview reload


【解决方案1】:

如果您在从SettingViewController 回到HomeViewController 时将视图推送到HomeViewController,在这种情况下,它将在HomeViewController 中调用ViewDidLoad 方法,我猜您正在UIWebView 中在ViewDidLoad 方法中加载内容.

为了防止这种情况 创建从HomeViewControllerSettingViewController 的segue,并在单击按钮时从prepareForSegue 方法调用给定的segueID

然后在后退按钮上单击只需弹出您的视图 (无需为返回按钮添加任何代码,它会自动弹出您的视图,但如果您愿意,您可以添加[self.navigationController popViewControllerAnimated:YES];

viewDidLoad 中加载您的 webView 内容

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self configureView];
    NSURL *url = [NSURL URLWithString:@"http://www.lipsum.com/"];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [self.webViewDemo loadRequest:urlRequest];
}

因为HomeViewController 中的ViewDidLoad 方法仅在视图同时添加到堆栈时调用一次视图弹出它只会调用viewWillAppearviewDidAppear 每次当HomeViewController 位于顶部时堆栈

ViewDidLoad添加断点,可以看到

【讨论】:

  • @PawandeepSingh,我已经更新了我的答案,现在检查
【解决方案2】:

如果视图控制器被再次加载,这意味着它之前被释放.....很可能它被弹出或关闭并且没有人保留视图

a) 简单的解决方案:不要从视图堆栈中删除 vc

b) 'hard' ;) 解决方案:让 somone 坚持下去,这样它就永远不会被释放——这不是一个好的设计 IMO,因为视图不应该被缓存到 UIKit 所做的之外,但它可以工作并且它会帮助旧的国家。

  • 为某人提供一个额外的 VC 出口,然后推送并弹出它
  • 在其他 VC 上使用属性,或者如果您必须在 appDelegate 上使用属性

=> 两种方式都要求您退出纯故事板

【讨论】:

  • 这与它被加载两次的事实完全无关——AFAICS
  • 我不明白你所说的 Daij Djan。
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2011-08-24
  • 2013-09-03
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多