Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在运行时添加UIButton_Iphone_Cocoa Touch - Fatal编程技术网

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的问题无关。