2

最新の Monotouch 5.2.4 を使用しています。私の開発の一環として、ポップオーバー コントローラーの背景の境界線を変更しようとしています。Apple のドキュメントによると、これは UIPopoverBackgroundView クラスから継承されたカスタム クラスを使用して管理できます。

だから私は以下のようなクラスを作成しました

public class MyPopoverBackground : UIPopoverBackgroundView
{
    public MyPopoverBackground ()
    {
        UIImageView imgBackground = new UIImageView();
        UIImage img = UIImage.FromFile(@"SupportData/Popbg.png");
        img.StretchableImage(18,10);
        imgBackground.Image = img;
        this.AddSubview(imgBackground);
    }   
}

このクラスを作成した後、このビューを View Controller にある Popup オブジェクトに関連付けようとしています。以下のように定義されています

UIPopoverController popup = new UIPopoverController(searchPage);
popup.popOverBackroundViewClass = new MyPopoverBackground(); //This line throws compilation error

割り当てが発生している上記のコードの最後の行で、コンパイル エラーがスローされます (「.. の定義が含まれていません」)。

これは何を意味するのでしょうか?これは Monotouch ではサポートされていませんか (オンラインで多くの例を見ると、Objective-C でサポートされているようです)? または、何かが欠けています。

あなたの助けに感謝。

4

1 に答える 1

3

よく釣れます!(iOS5 の新機能)のバインディングpopoverBackgroundViewClassが現在 MonoTouch から欠落しているようです。

導入検討してみます。http://bugzilla.xamarin.comでバグ レポートに記入する場合は、完了すると通知が届きます (この質問へのリンクを含む簡単なバグ レポートで十分です)。また、ホットフィックスまたは回避策を提供できるはずです。

アップデート

MonoTouch 5.3+ (リリース後) では、次のようなことができます。

popoverController.PopoverBackgroundViewType = typeof (MyPopoverBackgroundView);

ネイティブ側から実行する必要があるため、独自のインスタンスを作成できないことに注意してください (したがって、UIPopoverController作成するタイプのみを指定する理由)。

また、必要なセレクターをエクスポートすることを意味するすべての要件に従う必要がありますUIPopoverBackgroundView(メソッドも必要なため、単純に継承するよりも少し複雑ですstatic)。例えば

    class MyPopoverBackgroundView : UIPopoverBackgroundView {

        public MyPopoverBackgroundView (IntPtr handle) : base (handle)
        {
            ArrowOffset = 5f;
            ArrowDirection = UIPopoverArrowDirection.Up;
        }

        public override float ArrowOffset { get; set; }

        public override UIPopoverArrowDirection ArrowDirection { get; set; }

        [Export ("arrowHeight")]
        static new float GetArrowHeight ()
        {
            return 10f;
        }

        [Export ("arrowBase")]
        static new float GetArrowBase ()
        {
            return 10f;
        }

        [Export ("contentViewInsets")]
        static new UIEdgeInsets GetContentViewInsets ()
        {
            return UIEdgeInsets.Zero;
        }
    }
于 2012-02-16T14:23:48.853 に答える