首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类UIButton

子类UIButton
EN

Code Review用户
提问于 2011-03-11 15:41:49
回答 2查看 2.4K关注 0票数 2

我需要子类UIButton,但是UIButton的设计使这非常痛苦。这是因为要创建一个真正需要调用的按钮:

代码语言:javascript
复制
[UIButton buttonWithType:UIButtonTypeRoundedRect]

因此,如果我想要子类,那么我确实需要做这个方法所做的任何事情。但是,不可能设置基础类型的按钮。

一种选择是使用类似于装饰器和子类UIButton之类的东西,但将实际的按钮作为ivar,并将所有属性/方法调用推迟到此按钮。这里的问题是,我需要实现大部分的UIButton接口(哈欠)。

我所做的是在我的子类中做了一些更狡猾的事情。我创建了这个方法:

代码语言:javascript
复制
- (id) initWithType:(UIButtonType)buttonType
{
    [super init];

    actualButton = [[UIButton buttonWithType:buttonType] retain];

    memcpy(self, actualButton, sizeof(UIButton));
    self->isa = [ABDescriptorButton class];

    return self ;
}

我知道这是非常非正统的,但它的工作和相当干净的代码。我对这种方法可能会有什么缺陷呢?

EN

回答 2

Code Review用户

回答已采纳

发布于 2011-04-15 22:49:11

您不需要创建initWithType:方法。只需重写buttonWithType:工厂方法即可。

票数 4
EN

Code Review用户

发布于 2011-03-11 16:44:50

我想我自己也意识到了这个问题。内存管理变得非常混乱,因为我们现在实际上正在跟踪两个实际上是同一个对象的对象。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/1249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档