使用alloc后如何初始化UIButton的类型?

Posted

技术标签:

【中文标题】使用alloc后如何初始化UIButton的类型?【英文标题】:How to init UIButton's type after using alloc? 【发布时间】:2012-04-07 13:25:50 【问题描述】:

我知道我们可以使用buttonWithType 方法来获取具有特定类型的 UIButton。

UIButton * button = [UIButton buttonWithType:(UIButtonTypeRoundedRect)];

今天随便用UIButton的alloc/init方法来创建一个UIButton:

UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(20, 300, 100, 50)];

然后我发现没有办法改变按钮的类型。因为UIButton的buttonType属性是只读的。

在 UIKit.framework 中,UIButton.h :

@property(nonatomic,readonly) UIButtonType buttonType;

我的问题是:如果我使用 alloc/init 创建 UIButton,我可以更改 UIButton 的类型吗?如果没有,由于UIButton中有NOT任何像-initWithType这样的init方法,我们只能使用+buttonWithType方法来获得一个自动释放的UIButton。听起来有点奇怪,为什么不提供一个initWithType方法呢?

【问题讨论】:

为什么不先用initWithType: 创建按钮,然后再改变他的框架? @Mat 嗨,initWithType 方法在 UIButton 中不存在。 对不起,我的意思是 buttonWithType: 【参考方案1】:

如果 +buttonWithType 为您处理,为什么还要分配和初始化?像这样扭转你的想法:

UIButton * button = [UIButton buttonWithType:(UIButtonTypeRoundedRect)];
[button setFrame:CGRectMake(20, 300, 100, 50)];

【讨论】:

感谢您的回答。我通常使用buttonWithType。今天随便发现了这个问题,想知道有没有设计目的。 我想这是因为他们还没有确定切换按钮类型的方法。 我认为你的想象是合理的。谢谢,我只是想确认一下。

以上是关于使用alloc后如何初始化UIButton的类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何初始化 UIButton 子类?

初始化后访问自定义 UIButton 类中的插座

iOS 底层探究之 alloc

超级视图旋转后UIButton没有收到触摸

UIButton(在代码中使用)

自定义 UIButton 没有点击效果