【问题标题】:Link to pdf within app在应用程序内链接到 pdf
【发布时间】:2011-01-11 19:43:01
【问题描述】:

我有一个 iOS 应用程序,它有时会在 web 视图中打开指向网站的链接。这些链接保存在 plist 文件中(因此随着应用程序的发展很容易维护它们)。我接下来要做的是链接到保存在应用程序中的 PDF(或任何文本文件格式的图片,甚至是 html 格式,这很灵活)。我想在现有的应用程序结构中尽可能多地做到这一点。那么,是否可以创建一个可以作为网络链接放入 plist 中的链接,而是在设备本身上打开一个文件(可能在网络视图中)?我该怎么做呢?有任何想法吗?

提前感谢您的帮助!

【问题讨论】:

    标签: iphone pdf ios uiwebview plist


    【解决方案1】:

    您需要在运行时创建链接。我建议对本地 url 使用特定的前缀,例如 mylocalfile:filename。然后,在加载 plist 的代码中,检查前缀并在必要时创建链接。您也可以只创建一次这些链接并将它们存储在单独的文件中,然后加载该文件而不是原始文件。

    NSArray *links = nil; //I assumed your plist is an array. Change to dictionary if required
    NSString *pathToStoredFile; //Get the path for the file you create with the updated links
    if([[NSFileManager defaultManager] fileExistsAtPath:pathToStoredFile]) {
        links = [NSArray arrayWithContentsOfFile:pathToStoredFile];
    } else {
        NSArray *tmp = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ListOfLinks" ofType:@"plist"]];
        if(!tmp) {
            //handle error
        }
        NSMutableArray *tmpLinks = [[NSMutableArray alloc] initWithCapacity:[tmp count]];
        for(NSString *link in tmp) {
            if([link hasPrefix:@"mylocalfile:"]) {
                link = [link substringFromIndex:12]; //12 is the length of mylocalfile:
                NSURL *url = [[NSBundle mainBundle] urlForResource:[link stringByDeletingPathExtension] withExtension:[link pathExtension]];
                [tmpLinks addObject:[url absoluteString]];
            } else [tmpLinks addObject:link];
        }
        links = [tmpLinks copy];
        [tmpLinks release];
        [links writeToFile:pathToStoredFile atomically:NO];
    }
    

    【讨论】:

      【解决方案2】:

      是的,我会选择 UIWebView。 iOS 应该能够自动处理某些 URL 处理程序,并且您的应用程序可以根据需要 register to handle 其余部分。

      iOS 已经知道如何处理某些文件类型。例如,如果 Safari(或 UIWebView)遇到http://somesite.com/afile.pdf,它就知道哪些应用程序可以处理该文件类型。另一个例子是电话号码:skype://8005555555。 iOS 知道打开 Skype 并将号码传递给它。 iOS 也知道 iBooks 可以处理 PDf 文件。

      为您的应用注册适当的文件处理程序和类型。然后,用户可以点击并按住链接以查看可用应用程序的菜单来处理链接。如果是只供一个应用使用的链接,用户甚至不需要按住,轻点一下就足够了。

      至于创建指向本地文件的链接,您可以使用 C 函数 NSDocumentsDirectory() 并将其附加到 url 处理程序。 (例如:http://NSDocumentsDirectory()/filename.pdf

      【讨论】:

      • 感谢您的回答,但我不太明白。我可以创建一个由 UIWebView 处理的链接来加载本地 PDF 吗?我该怎么做?你有我的起点或信息来源吗?
      猜你喜欢
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 2016-08-17
      相关资源
      最近更新 更多