我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) { }
}
如果我在另一个视图的xib中使用BackButton
,则其基础类被视为BackButton
:
但是,当我从代码创建实例时,底层类只是UIButton
:
这令人沮丧,因为我正在尝试use UIAppearance这个课程,我需要它才是正确的实例。
有什么问题?
答案 0 :(得分:3)
原来,我不得不调用无参数UIButton
构造函数,而不是我调用的构造函数。
从构造函数定义中删除: base (UIButtonType.Custom)
足以使其工作:
public BackButton (string text, EventHandler handler)
// : base (UIButtonType.Custom) -- remove this line
{
TouchUpInside += handler;
SetTitle (text, UIControlState.Normal);
}
事后看来,这很有道理,因为MonoTouch提供的UIButton(UIButtonType)
构造函数实际上调用了[UIButton buttonWithType:]
:
public UIButton (UIButtonType type) : base (
Messaging.IntPtr_objc_msgSend_int (UIButton.class_ptr,
UIButton.selButtonWithType_, (int)type)
) { }
我认为,[UIButton buttonWithType:]
无法了解我的自定义视图,因此只创建UIButton
。