Добавить кнопку в UITableViewCell - PullRequest
5 голосов
/ 12 января 2012

Я хочу добавить кнопку в UITableViewCell. Это мой код: `

if (indexPath.row==2) {
    UIButton *scanQRCodeButton = [[UIButton alloc]init];

    scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f);
    scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    scanQRCodeButton.backgroundColor = [UIColor redColor];
    [scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal];

    [cell addSubview:scanQRCodeButton];
}`

Теперь, когда я запускаю приложение, я вижу только пустую строку! Есть идеи?

Ответы [ 5 ]

13 голосов
/ 12 января 2012

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

В любом случае, проблема заключается в первых трех строках, когда вы начинаете создавать свою кнопку. Первые две строки в порядке, но код перестает работать с:

scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

buttonWithType: на самом деле удобный метод для создания кнопки (это как компактный alloc-init). Следовательно, он фактически «обнуляет» ваши последние две строки (вы в основном создали кнопку дважды). Вы можете использовать только init или buttonWithType: для одной и той же кнопки, но не для обеих.

UIButton *scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f);
scanQRCodeButton.backgroundColor = [UIColor redColor];
[scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal];    
[cell addSubview:scanQRCodeButton];

Это будет работать (обратите внимание, что вы можете использовать cell.contentView, если хотите). Если вы не используете автоматический подсчет ссылок (ARC), я хотел бы упомянуть, что вам не нужно ничего делать с точки зрения управления памятью, потому что buttonWithType: возвращает кнопку с автоматическим освобождением.

7 голосов
/ 18 января 2013
    UIButton *deletebtn=[[UIButton alloc]init];
            deletebtn.frame=CGRectMake(50, 10, 20, 20);
            deletebtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            [deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal];
            [deletebtn addTarget:self action:@selector(DeleteRow:) forControlEvents:UIControlEventTouchUpInside];
            [cell.contentView addSubview:deletebtn];

или

// Скачать класс и импортировать в ваш проект UIButton + EventBlocks

UIButton *deletebtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
[deletebtn setFrame:CGRectMake(170,5, 25, 25)];
deletebtn.tag=indexPath.row;
[deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal];
[deletebtn setOnTouchUpInside:^(id sender, UIEvent *event) {


  //Your action here
}];
[cell addSubview:deletebtn];
4 голосов
/ 12 января 2012

Вы хотите добавить любые пользовательские элементы интерфейса в ячейку contentView.

Итак, вместо [cell addSubview:scanQRCodeButton];
делать [cell.contentView addSubview:scanQRCodeButton];

1 голос
/ 12 января 2012

Попробуйте добавить [cell.contentView addSubview:scanQRCodeButton]; или, если вы хотите, чтобы кнопка слева, посмотрите на мой вопрос в ответе, чтобы переместить textLabel в сторону.Если вы хотите кнопку справа, просто установите ее как accesoryView, как это cell.accesoryView = scanQRCodeButton;.

0 голосов
/ 07 июня 2014

Метод setTitle не работает в моем коде, поэтому я установил с помощью

[UIButton.titleLabel setText:@""]

вместо использования setTitle метода.

Пожалуйста, попробуйте еще раз со следующим кодом:

[scanQRCodeButton.titleLabel setText:@"Hello"];

Тогда это будет хорошо работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...