iPhone と iPad の両方をサポートするユニバーサル アプリ内で作業しています。私は現在、UIDocumentInteractionController を使用して PDF を表示し、その PDF にいくつかのオプションを提供しています (最も重要なのは印刷機能です)。概要が表示され、プレビューの RightBarButtonItem が適切に印刷できるため、すべてが iPad で問題なく動作しているように見えます。ただし、iPhone で作業している場合、RightBarButtonItem をクリックすると次のエラーが表示されます。
Presenting action sheet clipped by its superview. Some controls might not respond to touches. On iPhone try -[UIActionSheet showFromTabBar:] or -[UIActionSheet showFromToolbar:] instead of -[UIActionSheet showInView:].
典型的なアクション シートでこれを解決するのは比較的簡単です。
ActionSheet.ShowFromTabBar(this.TabBarController.TabBar);
ActionSheet.ShowFromToolbar(this.NavigationController.ToolBar);
ただし、ドキュメントコントローラーで調理されているため、その方法を理解するのが難しいと感じています。インタラクション コントローラーのコードは、ここで見つけた他の実装と比較して非常に標準的であるため、欠けている小さなものがあると確信しています。実装は次のとおりです。
invoiceInteractionController = UIDocumentInteractionController.FromUrl(url);
invoiceInteractionController.Delegate = new UIDocumentInteractionControllerDelegateClass(this);
InvokeOnMainThread(delegate{
if (!DeviceHelper.IsIPhone())
invoiceInteractionController.PresentOptionsMenu(NavigationItem.RightBarButtonItem, true);
else {
invoiceInteractionController.PresentPreview(true);
}
});
今のところ、デバイスが iPhone の場合は、このコードでわかるようにプレビューにスキップします。問題は、前述の問題をスローする右上のバー ボタン項目が押されたときのプレビュー コントローラー内にあります。ただし、余談ですが、PresentPreview() を次のように置き換えます。
invoiceInteractionController.PresentOptionsMenu(new RectangleF(320,320,0,500), this.NavigationController.Toolbar, true);
これも同じエラーを引き起こします。
次のようなデリゲートクラスと関係があるかどうかは、ほとんど疑問に思っています。
public class UIDocumentInteractionControllerDelegateClass : UIDocumentInteractionControllerDelegate
{
UIViewController viewC;
public UIDocumentInteractionControllerDelegateClass (UIViewController controller)
{
viewC = controller;
}
public override UIViewController ViewControllerForPreview (UIDocumentInteractionController controller)
{
return viewC;
}
public override UIView ViewForPreview (UIDocumentInteractionController controller)
{
return viewC.View;
}
public override RectangleF RectangleForPreview (UIDocumentInteractionController controller)
{
return viewC.View.Frame;
}
}
いつものように、どんな助けも大歓迎です。