Подтвердить что ты не робот

Как добавить 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;
}
4b9b3361

Ответ 1

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

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

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

Ответ 2

Вы должны освободить 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];

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Тогда часть initWithFrame не будет выполняться. Поэтому, пожалуйста, проверьте один раз.