如何在运行时添加UIButton

时间:2008-11-21 04:18:39

标签: iphone cocoa-touch

我正在尝试在运行时添加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;
}

5 个答案:

答案 0 :(得分:9)

首先,确保调用initWithFrame:方法。如果您的视图位于Nib中,则会调用initWithCoder:。

其次,按钮是唯一的子视图(从您的代码看起来像是,但您永远不知道)。该按钮可以隐藏在另一个子视图后面。调用bringSubviewToFront:如果需要。

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

答案 1 :(得分:1)

您必须释放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];

答案 2 :(得分:0)

如果仍然无效,请尝试删除选择器名称末尾的:@selector(buttonClick)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

首先检查您的代码是否正在执行initwithFrame方法。 因为如果你从nib加载视图,即使用

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

然后initWithFrame部分将不会执行。所以请检查一次。