使用UIActivityViewController和UIDocumentInteractionController在iBooks中打开PDF

时间:2013-10-23 09:53:10

标签: xamarin.ios xamarin

我正在尝试创建一个应用程序来查看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);
            }

当我按下按钮执行此代码时,我看到了viewcontroller,但只有Mail和Print(在带有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上显示邮件和打印的方法。任何人的想法?

1 个答案:

答案 0 :(得分:1)

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

但是,创建自己的UIActivity提供程序非常容易。我用C#为AirPlay制作了一个(可在github上找到),你可以用它作为你的基础。

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

请注意,我建议您不要这样做:

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

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