1

我正在尝试制作一个应用程序来查看 PDF 并将其保存在 iBooks 中,邮寄并打印。现在我正在使用以下代码:

            if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0))
            {
                AppDelegate appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
                 //url to local PDF
                var items = new NSObject[] { NSData.FromFile(_pdfUrl) };
                var activityController = new UIActivityViewController(items, null);
                activityController.ExcludedActivityTypes = new NSString[]
                { 
                    UIActivityType.AssignToContact, 
                    UIActivityType.Message,
                    UIActivityType.PostToFacebook,
                    UIActivityType.PostToTwitter,
                    UIActivityType.PostToWeibo,
                    UIActivityType.CopyToPasteboard,
                    UIActivityType.SaveToCameraRoll
                };

                PresentViewController(activityController, true, null);
            }

当我按下按钮执行此代码时,我看到了视图控制器,但只有邮件和打印(在带有 iBooks 的设备上测试)。我的问题是:“在 iBooks 中打开”是我必须自己添加的吗?还是我做错了什么?

另一个问题是在 iOS5 中做同样的事情时,我使用 UIDocumentInteractionController:

                UIDocumentInteractionController doc = UIDocumentInteractionController.FromUrl(new NSUrl(_pdfUrl, false));
                doc.WeakDelegate = this;
                doc.PresentOptionsMenu(btn.Frame, this, true);

但什么也没发生(iPhone 模拟器,没有装有 iOS 5 的设备)。在另一篇文章中,有人说如果设备上没有 iBooks,什么都不会发生。但是邮件和打印呢?

有人可以帮我解决这个问题吗?

提前致谢

编辑:

在 iOS 6 中使用此代码可以完美运行:

            UIDocumentInteractionController doc = UIDocumentInteractionController.FromUrl(new NSUrl(_pdfUrl, false));
            doc.WeakDelegate = this;
            doc.PresentOptionsMenu(btn.Frame, this, true);

编辑:

我正在寻找一种使用 UIDocumentInteractionController 在 iOS5 上显示邮件和打印的方法。有什么想法吗?

4

1 回答 1

1

那是因为 iBooks 没有内置UIActivityType常量。

但是,创建自己的UIActivity提供程序非常容易。我在 C# 中为 AirPlay 制作了一个(可在github上获得),您可以将其用作您的基础。

首先是检测 iBook 是否可用(覆盖CanPerform)。看来您可以使用 `"ibooks://" 前缀来检查这一点(所以应该更容易)接下来是打开文档,然后提供一个图标。

请注意,我建议您避免这样做:

var items = new NSObject[] { NSData.FromFile(_pdfUrl) };

并且只能使用 URL,因为您不知道 PDF 可能有多大(它可能大于设备的可用内存)。

于 2013-10-23T20:10:37.327 回答