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 回答