如何在运行时添加UIButton

问题描述:

我试图在运行时添加UIButton,但它不可见。我究竟做错了什么?如何在运行时添加UIButton

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     UIButton *btn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
     btn.frame = CGRectMake(0, 0, 100, 25); 
     btn.backgroundColor = [UIColor clearColor]; 
     [btn setTitle:@"Play" forState:UIControlStateNormal]; 
     [btn addTarget:self action:@selector(buttonClick:) 
     forControlEvents:UIControlEventTouchUpInside]; 
     btn.center = self.center; 
     [self addSubview:btn]; 
    } 
    return self; 
} 
+3

此代码将泄漏;你保留了你的btn对象,但是从未释放它。第一个保留消息是不必要的。 – 2008-11-21 11:56:32

+0

我已将UIButton视图添加到viewDidLoad的子视图而不是某些init方法,取得了很好的效果。 – 2009-10-30 09:09:55

+0

我也面临同样的问题。实际问题是什么? – iOS 2012-12-05 06:15:17

首先,确保调用了initWithFrame:方法。如果您的视图位于Nib中,则会调用initWithCoder:。其次,按钮是唯一的子视图(从你的代码看起来是这样,但你永远不知道)。该按钮可能隐藏在另一个子视图的后面。调用bringSubviewToFront:如果你需要。

最后,视图本身是否可见?显示按钮足够大吗?以您的示例为例,如果视图宽度小于100像素,则该按钮将不会显示,因为它会被视图的边界限制。

+0

那么,什么解决了它?这是三种可能性......你可以发布DID工作的代码吗? – 2012-04-16 18:47:37

如果仍然不行,请尝试删除:在选择名字的末尾:@selector(buttonClick)

必须释放btn并删除 “:” 在buttonClick

UIButton *btn= [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
btn.frame = CGRectMake(0, 0, 100, 25); 
btn.backgroundColor = [UIColor clearColor]; 
[btn setTitle:@"Play" forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btn]; 
[btn release]; 

您不需要保留UIButton,因为它由[self.view addSubview:btn]保留;

首先检查您的代码是否正在执行initwithFrame方法。 因为如果你使用的是

NSArray *xibviews = [[NSBundle mainBundle] loadNibNamed: @"MySubview" owner: mySubview options: NULL]; 
MySubview *msView = [xibviews objectAtIndex: 0]; 
[self.view addSubview:msView]; 

然后initWithFrame部分将不会加载从笔尖即认为executing.So请检查一次。