Iphone 如何在运行时添加UIButton
我试图在运行时添加Iphone 如何在运行时添加UIButton,iphone,cocoa-touch,Iphone,Cocoa Touch,我试图在运行时添加ui按钮,但它不可见。我做错了什么 - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { UIButton *btn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; btn.frame = CGRectMake(0, 0, 100, 25); bt
ui按钮
,但它不可见。我做错了什么
- (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像素,按钮将不会显示,因为它将被视图的边界截断。如果它仍然不工作,请尝试删除选择器名称末尾的:@selector(buttonClick)您必须释放
btn
并删除“:”在按钮中单击:
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方法。
因为如果您是从nib加载视图,即使用
NSArray *xibviews = [[NSBundle mainBundle] loadNibNamed: @"MySubview" owner: mySubview options: NULL];
MySubview *msView = [xibviews objectAtIndex: 0];
[self.view addSubview:msView];
那么initWithFrame部分将不会执行。因此请检查一次。此代码将泄漏;您正在保留btn对象,但从未释放它。第一条retain消息是不必要的。我通过将UIButton视图从viewDidLoad添加到子视图而不是一些init方法,取得了很好的效果。我也面临同样的问题。真正的问题是什么?那么,是什么解决了它?这是三种可能性。。。你能发布有效的代码吗?说删除“buttonClick”中的:是不合适的。默认处理程序是-(void)onClick:(id)sender。因此,需要一个“:”。如果处理程序没有输入,则为“是”。释放的替代方法是自动释放create语句中的按钮。这与OP的问题无关。