Как создать UITableViewCell, содержащую одну UIButton, занимающую большую часть пространства ячейки?

#cocoa-touch #uitableview #uibutton

#cocoa-touch #uitableview #uibutton

Вопрос:

Я пытаюсь создать UITableViewCell, которая содержит одну большую кнопку.

Я попробовал то, что казалось очевидным, добавив UIButton в contentView ячейки, но это не сработало (ячейка отображается пустой). В чем я не прав?

 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"startButtonCell"];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                   reuseIdentifier:@"startButtonCell"] autorelease];
    UIButton *btn = [[UIButton alloc] initWithFrame:cell.contentView.bounds];
    [cell.contentView addSubview:btn];
    if (!self.task.isCompleted) {
        btn.titleLabel.text = @"Start!";
    }else{
        btn.titleLabel.text = @"Continue!";
    }
    [btn release];
}
  

Комментарии:

1. Я предполагаю, что это ваша -cellForRowAtIndexPath: реализация… Вы уверены, что ваш код выполняется в прошлом if (cell == nil) { ? И правильно ли создана кнопка в отношении ее размера? не могли бы вы предоставить полный -cellForRowAtIndexPath: ?

Ответ №1:

Попробуйте следующее:

 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setFrame:cell.contentView.frame];
[btn setTitle:@"Button Title" forState:UIControlStateNormal];
[cell.contentView addSubview:btn];
  

Я далеко не эксперт, но я думаю, что проблема с вашим решением заключается в том, что по умолчанию стиль кнопки UIButton — UIButtonTypeCustom , который невидим, потому что он еще не настроен. Если я изменю приведенный выше код с

 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  

Для

 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  

Я получаю тот же результат, что и вы. Кнопка не видна. Если вы хотите использовать UIButtonTypeCustom, вам придется выполнить некоторые настройки. Например, добавление фонового изображения к вашей кнопке.