我制作了一个应用程序,其中包含许多在UIwebview中加载的PDF文件。每当我打开PDF,关闭它,然后再回到它,文件再次从顶部开始,它重新加载。我不希望一旦用户退出文件并重新加载它就重新加载。
我的代码示例如下。
(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];
}
答案 0 :(得分:1)
实际上,我不认为UIWebView
是“令人耳目一新”。这将假定相同的UIWebView
。由于您发布了-viewDidLoad
代码,实际发生的是您正在创建一个全新的UIViewController
,其新属性也是新创建的。
我能想到的唯一方法是阻止这种情况发生strong
属性UIViewController
,以便当你将它从屏幕上弹出时它不被破坏(我是假设您通过将其从UINavigationController
堆栈的顶部弹出来“关闭”它。这可以解释为什么您的viewDidLoad
代码多次运行,因为每UIViewController
个实例只运行一次。
因此,在您的AppDelegate
(或其他应用级单例对象)中,创建一个这样的属性:
@property (strong, nonatomic) UIViewController *pdfViewController;
然后,当需要加载PDF以供查看时,您可以检查此属性是否已存在,如果是,则只需按下已在内存中的UIViewController
即可。这应该保持用户在弹出UIViewController
时看到的相同视图。我认为这样的事情会起作用(假设这段代码在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];
您可以选择性地覆盖某些视图生命周期方法来选择所发生的事情:
当然,如果您希望有选择地显示 多个 PDF文件之一,您还需要具有描述当前正在显示哪个PDF的属性。是否为每个PDF文件创建不同的UIViewController
实例(并保留其属性)取决于您。这绝对是您具体问题的问题。在同时加载几个单独的实例后,此方法可能会导致内存问题。