如何防止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
。 这应该保持与UIViewController
popup时用户所看到的相同的视图。 我会想这样的事情会工作(假设这个代码是在一个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
实例(并保留一个属性),都取决于你。 这绝对是你的具体问题的一个问题。 这种方法在同时加载几个单独的实例之后可能会导致内存问题。