2008-11-21 6 views
16

Я пытаюсь добавить UIButton во время выполнения, однако это не видно. Что я делаю не так?Как добавить 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; 
} 
+3

Этот код будет протекать; вы сохраняете свой объект btn, но не выпускаете его. Первое сообщение сохранения не требуется. – 2008-11-21 11:56:32

+0

Я достиг хороших результатов, добавив представление UIButton в subview из viewDidLoad вместо некоторых методов init. – 2009-10-30 09:09:55

+0

У меня тоже такая же проблема. Какова была проблема? – iOS 2012-12-05 06:15:17

ответ

9

Во-первых, убедитесь, что вызывается метод initWithFrame :. Если ваше представление находится в Nib, вместо него вызывается initWithCoder:.

Во-вторых, кнопка является единственным подзаголовком (из вашего кода он выглядит так, как будто есть, но вы никогда не знаете). Кнопка может быть скрыта за другим подзором. Вызов bringSubviewToFront: если вам нужно.

И, наконец, вид сам по себе видимый? Достаточно ли достаточно, чтобы показать кнопку? Учитывая ваш пример, если размер представления меньше 100 пикселей, кнопка не будет отображаться, потому что она будет обрезана границами представления.

+0

Итак, что решило? Это три возможности ... можете ли вы опубликовать код, который работает DID? – 2012-04-16 18:47:37

0

, если он по-прежнему не работает, попробуйте удалить: в конце имени селектора: @selector (ButtonClick)

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]; 
0

Вам не нужно сохранять UIButton, потому что он сохраняется [self.view addSubview: btn];

0

Сначала проверьте, выполняется ли ваш код методом initwithFrame. Потому что, если вы загружаете вид из пера с помощью

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

Тогда initWithFrame часть не будет executing.So, пожалуйста, проверьте один раз.

Смежные вопросы