Jamey McElveen
Jamey McElveen

Reputation: 18305

How to add a UIButton at runtime

I am trying to add a UIButton at runtime however it is not visible. What am I doing wrong?

- (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;
}

Upvotes: 16

Views: 31736

Answers (5)

kumar123
kumar123

Reputation: 889

First check whether your code is executing the initwithFrame method. Because if you are loading the view from nib i.e using

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

Then the initWithFrame part will not be executing.So please check once.

Upvotes: 0

NguyenHungA5
NguyenHungA5

Reputation: 69

You must release btn and remove ":" in 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];

Upvotes: 1

Wayne Lo
Wayne Lo

Reputation: 3719

You don't need to retain the UIButton because it is retained by [self.view addSubview:btn];

Upvotes: 0

David
David

Reputation:

if it still doesn't work, try removing the : at the end of the selector name: @selector(buttonClick)

Upvotes: 0

August
August

Reputation: 12187

First, make sure the initWithFrame: method is being called. If your view is in a Nib, initWithCoder: is being called instead.

Second, is the button the only subview (from your code it looks like it is, but you never know). The button could be hidden behind another subview. Call bringSubviewToFront: if you need to.

Finally, is the view itself visible? Is it big enough to show the button? Given your example, if the view is less than 100 pixels wide, the button won't show because it will get clipped by the view's bounds.

Upvotes: 9

Related Questions