2

私はBackButtonそれを継承していUIButtonます。
xibがなく、非常にシンプルで、省略したレイアウトロジックが含まれています。

これが私がそれを宣言した方法です:

[Register("BackButton")]
public class BackButton : UIButton
{
    public BackButton (string text, EventHandler handler)
        : base (UIButtonType.Custom)
    {
        TouchUpInside += handler;
        SetTitle (text, UIControlState.Normal);
    }

    public BackButton(IntPtr handle) : base(handle) { }
}

BackButton別のビューのxibで使用する場合、その基になるクラスは次のように表示されBackButtonます。

ただし、コードからインスタンスを作成する場合、基礎となるクラスは次のUIButtonとおりです。

このクラスにUIAppearanceを使用しようとしているので、これはイライラします。適切なインスタンスである必要があります。

どうしたの?

4

1 に答える 1

3

結局、呼び出していたコンストラクターではなく、パラメーターUIButtonなしのコンストラクターを呼び出さなければなりませんでした。コンストラクター定義から
削除するだけで、それを機能させることができました。: base (UIButtonType.Custom)

public BackButton (string text, EventHandler handler)
     // : base (UIButtonType.Custom) -- remove this line
{
    TouchUpInside += handler;
    SetTitle (text, UIControlState.Normal);
}

UIButton(UIButtonType)後から考えると、MonoTouchによって提供されるコンストラクターが実際に[UIButton buttonWithType:]:を呼び出すため、これは完全に理にかなっています。

public UIButton (UIButtonType type) : base (
    Messaging.IntPtr_objc_msgSend_int (UIButton.class_ptr,
        UIButton.selButtonWithType_, (int)type)
    ) { }

[UIButton buttonWithType:]カスタムビューについて知る方法はないので、を作成するだけだと思いますUIButton

于 2012-10-18T09:13:14.880 に答える