如何防止UIwebView刷新?

我已经做了一个应用程序,其中包含了很多在UIwebview中加载的PDF文件。 每当我打开PDF,closures它,然后回到它,文件再次从顶部开始,它重新加载。 一旦用户退出文件并重新加载,我不希望它重新加载。

我的代码示例如下。

(void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSString *path = [[NSBundle mainBundle] pathForResource:@"HnonC" ofType:@"pdf"]; NSURL *url = [NSURL fileURLWithPath:path]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [Webview loadRequest:request]; [Webview setScalesPageToFit:YES]; [super viewDidLoad]; } 

其实,我不认为UIWebView是“刷新”。 这将假设相同的UIWebView 。 既然你发布了你的-viewDidLoad代码,实际发生的事情是你正在创build一个全新的UIViewController ,它的所有属性都是新创build的。

我唯一能想到的方法就是让UIViewController成为一个strong属性,这样当你把它从屏幕上popup时,它就不会被销毁(我假设你是通过popup它来“closures”它的)closuresUINavigationController堆栈的顶部)。 这可以解释为什么你的viewDidLoad代码运行多次,因为每个UIViewController实例只运行一次。

所以,在你的AppDelegate (或另一个应用程序级的单例对象)中,做一个这样的属性:

 @property (strong, nonatomic) UIViewController *pdfViewController; 

然后,当加载PDF查看的时候,你可以检查这个属性是否已经存在,如果是这样的话,只需要推送已经在内存中的UIViewController 。 这应该保持与UIViewControllerpopup时用户所看到的相同的视图。 我会想这样的事情会工作(假设这个代码是在一个IBAction什么的):

 AppDelegate *del = [[UIApplication sharedApplication] delegate]; UIViewController *pdfViewController = del.pdfViewController; if (pdfViewController == nil) { pdfViewController = // Some code to create the view controller del.pdfViewController = pdfViewController; } [self.navigationController pushViewController:pdfViewController]; 

您可以select覆盖某些视图生命周期方法来select发生的情况:

  • -viewDidLoad:每个实例调用一次
  • -viewWillAppear:每次调用视图控制器时被调用/显示
  • -viewDidAppear:每次调用视图控制器时被调用/显示

当然,如果您希望有select地显示多个 PDF文件中的一个,则还需要有一个属性来描述当前正在显示的PDF。 无论你为每个PDF文件制作一个不同的UIViewController实例(并保留一个属性),都取决于你。 这绝对是你的具体问题的一个问题。 这种方法在同时加载几个单独的实例之后可能会导致内存问题。