8

我正在为网站开发一个包装应用程序。基本上,它会在 UIWebView 中打开网站的移动版本。网站上的一些链接指向 PDF。

当在 Safari 中打开同一个站点并点击指向 PDF 的链接时,PDF 上会显示一条带有“在 iBooks 中打开”的漂亮黑色条纹。如下图所示:

在此处输入图像描述

我怎样才能在我的应用程序中实现相同的条纹?

编辑:

不是在问如何在半透明背景上创建一个黑色按钮。

我有兴趣重现整个工作流程:

  • 用户导航到 PDF
  • 当且仅当条带(视图)弹出安装了 iBooks 应用程序(或任何其他 PDF 查看器)
  • 点击弹出窗口中的按钮将文档传输到该应用程序并打开该应用程序。
4

2 回答 2

24

要检查是否安装了 iBooks,您可以调用:

BOOL iBooksInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"ibooks://"]];

您可以使用以下方式显示应用程序列表(为什么仅限于 iBooks?;)):

//use the UIDocInteractionController API to get list of devices that support the file type
NSURL *pdfURL = // your pdf link.
UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:pdfURL];

//present a drop down list of the apps that support the file type, click an item in the list will open that app while passing in the file.
 [docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];

请注意,除非您制作了一个读取 PDF 的应用程序,否则这在 iOS 模拟器上不起作用!

如果您真的只想提供让 PDF 在 iBooks 中打开的选项,您可能需要尝试将文件的 URL 附加到 @"ibooks://" 方案或 iBooks 提供的其他两种方案之一(这适用于 iBook Store 中的书籍,但我不确定它是否也适用于其他 URL),即 @"itms-books://" 和 @"itms-bookss://"。然后,您可以执行以下操作:

NSURL *iBooksURLScheme = [NSURL URLWithString:@"ibooks://"];
NSString *fileURLString = // your file URL as *string*
NSURL *finalURL = [iBooksURLScheme URLByAppendingPathComponent:fileURLString];

[[UIApplication sharedApplication] openURL:finalURL];
于 2012-11-16T11:49:18.947 回答
1

(再次回答,因为我之前的回答不包括代码。抱歉)

对于解决我的问题的解决方案,我在这里找到了一个很好的示例。

我已将其剪切并粘贴在这里,以防它对某人有所帮助。完全归功于absoluteripple.com

假设你的类叫做 ViewController,那么在 ViewController.h 文件中:        

    
@interface 视图控制器:UIViewController
            {
                UIDocumentInteractionController *docController;
            }

在 ViewController.m 中添加以下方法: //- 设置 UIDocumentInteraction 控制器并将其委托设置为 self 以便我们可以处理回调事件        

- (UIDocumentInteractionController *) setupControllerWithURL:(NSURL *)fileURL
                                               usingDelegate:(id <UIDocumentInteractionControllerDelegate>)         interactionDelegate {
    
            UIDocumentInteractionController *interactionController =
            [UIDocumentInteractionController interactionControllerWithURL:fileURL];
            interactionController.delegate = interactionDelegate;
    
            return interactionController;
            }

               //- 这里的关键实例方法是presentOptionsMenuFromBarBUttonItem //- 这里假设有一个名为_btnActions的BarButtonItem        

    

    - (void)showOptionsMenu
            {
                NSURL *fileURL = [NSURL fileURLWithPath:@"THE_FILE_URL_PATH"];
                docController = [自我 setupControllerWithURL:fileURL
                                       usingDelegate:self];
                bool didShow = [docController presentOptionsMenuFromBarButtonItem:_btnActions
                                                                 动画:是];
                如果(!didShow){
                        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                            消息:@“对不起。在此设备上找不到合适的应用程序。”
                                                           代表:无
                                                  取消按钮标题:@“确定”
                                                  其他按钮标题:无];
                        [警报显示];
                }
            }
  1. 当您想显示可以将文件发送到的应用程序时,添加一个调用上述方法的方法 在此示例中,UIBarButton 连接到以下 IBAction:    
    - (IBAction)ActionButtonClicked:(id)sender {
            [自我显示选项菜单];}

这就对了。单击按钮时,将出现一个操作表(全部由 Apple 的 UIDocumentInteractionController 类提供支持),其中显示您可以将文件发送到的应用程序(如果有的话)。

您可以选择实现以下委托方法:

- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application

- (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application

- (void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller
于 2013-06-17T01:21:18.773 回答