繁体   English   中英

如何在运行时添加UIButton

[英]How to add a UIButton at runtime

我试图在运行时添加一个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像素,则按钮将不会显示,因为它将被视图的边界剪切。

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

如果它仍然不起作用,请尝试删除选择器名称末尾的::@ selector(buttonClick)

您不需要保留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部分将不会执行。所以请检查一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM