3

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;
    }
}

いつものように、どんな助けも大歓迎です。

4

1 に答える 1

0

アプリやコントローラーが機能しなくなるわけではないので、基本的にこれを解決済みとしてマークします。最終的には、ブランディング/スキニングにあまり適していないため、すべてをコントローラーの独自のロールに置き換える必要があると思います. タブバーから表示できる機能があれば、とてもいいと思います。

私が気づいたことの 1 つは、Interface Builder で定義されているタブバー内のナビゲーション コントローラー内にそれを表示すると、ドキュメント コントローラーは同じ警告をスローしますが、まったく表示されないということです。プログラムでタブバーを作成し、 RectangleF を明示的に定義すると、コントローラーが表示されますが、それでも警告がスローされます。

私の最善の推測は、PresentPreview(true) は、残念ながら右バー ボタンから表示されるアクション シートのボタンであるイベントを呼び出したコントロールから表示する必要があると想定していることです。警告が消えるようにするには、これ以上の提案をお待ちしております。

于 2012-09-21T13:29:37.597 に答える