Почему не отображается заголовок UIButton? - PullRequest
12 голосов
/ 26 июня 2009

В методе viewDidLoad UIViewController я делаю это:

UIButton *b = [[UIButton buttonWithType:UIButtonTypeRoundedRect] 
                                       initWithFrame:CGRectMake(0, 0, 100, 100)];

[b setTitle:@"Testing" forState:UIControlStateNormal];
[b setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];
[self.view addSubview:b];                       // EDIT: should be 'b'
NSLog(@"button title: %@", [b titleLabel].text);

Кнопка отображается, но название не отображается. Строка NSLog выводит «Testing» на консоль. Любые предложения о том, что я делаю не так?

Ответы [ 6 ]

38 голосов
/ 26 июня 2009

Я не могу сказать вам, почему это не работает, но у меня есть решение:

UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;        
b. frame = CGRectMake(0, 0, 100, 100);

[b setTitle:@"Testing" forState:UIControlStateNormal];
[b setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];
[self addSubview:b];   

Отдельное создание кадра из выделения и инициализации кнопки.

22 голосов
/ 26 июня 2009

Проблема заключается в

UIButton *b = [[UIButton buttonWithType:UIButtonTypeRoundedRect] 
                                       initWithFrame:CGRectMake(0, 0, 100, 100)];

buttonWithType возвращает автоматически освобожденный инициализированный объект. Вы не можете отправить его initWithFrame снова, поскольку объект можно инициализировать только один раз.

Установите его рамку отдельно:

b.frame = CGRectMake(0, 0, 100, 100);
4 голосов
/ 26 июня 2009

Сделайте это вместо:

UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b.frame = CGRectMake(0, 0, 100, 100);
[b setTitle:@"Testing" forState:UIControlStateNormal];
[b setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];
[self.view addSubview:b];  
0 голосов
/ 26 июня 2013

У меня была та же проблема, и в итоге я установил изображение, а не backgroundImage. Все работало нормально, когда я делал:

[button setBackgroundImage:image forState:UIControlStateNormal];
0 голосов
/ 05 марта 2013

Вы можете сделать следующее:

UIButton *b=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];

b=[UIButton buttonWithType:UIButtonTypeRoundedRect];

[b setTitle:@"Button Title Here" forState:UIControlStateNormal];
[b setTitleColor:[UIColor blackColor] forState: UIControlStateNormal];
[self.view addSubview:b];
0 голосов
/ 31 июля 2012

Дело в том, что вы должны пойти на [[UIButton alloc] initWithFrame:] или [UIButton buttonWithType:], вы не должны использовать оба вместе.

...