• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 我在 MonoTouch 中将 UIButton 子类化,但底层 ObjC 类仍然是 UIButton

[复制链接]
菜鸟教程小白 发表于 2022-12-13 17:09:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有继承 UIButtonBackButton
它没有 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) { }
}

如果我在另一个 View 的 xib 中使用 BackButton,它的底层类被视为 BackButton:

但是,当我从代码创建实例时,底层类只是 UIButton:

这很令人沮丧,因为我正在尝试 use UIAppearance对于这个类,我需要它是正确的实例。

有什么问题?



Best Answer-推荐答案


事实证明,我必须调用无参数 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:] 无法了解我的自定义 View ,因此它只会创建一个 UIButton

关于ios - 我在 MonoTouch 中将 UIButton 子类化,但底层 ObjC 类仍然是 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12949554/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap