如何在运行时添加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;
}
首先,确保调用了initWithFrame:方法。如果您的视图位于Nib中,则会调用initWithCoder:。其次,按钮是唯一的子视图(从你的代码看起来是这样,但你永远不知道)。该按钮可能隐藏在另一个子视图的后面。调用bringSubviewToFront:如果你需要。
最后,视图本身是否可见?显示按钮足够大吗?以您的示例为例,如果视图宽度小于100像素,则该按钮将不会显示,因为它会被视图的边界限制。
那么,什么解决了它?这是三种可能性......你可以发布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请检查一次。
此代码将泄漏;你保留了你的btn对象,但是从未释放它。第一个保留消息是不必要的。 – 2008-11-21 11:56:32
我已将UIButton视图添加到viewDidLoad的子视图而不是某些init方法,取得了很好的效果。 – 2009-10-30 09:09:55
我也面临同样的问题。实际问题是什么? – iOS 2012-12-05 06:15:17