UIButton для покрытия UITableViewCell - PullRequest
7 голосов
/ 05 декабря 2008

Мне бы хотелось, чтобы одна из строк моей таблицы была кнопкой, занимающей всю строку моего UITableView. Я подумал, что лучший способ сделать это - создать экземпляр UIButton и дать ему тот же размер кадра, что и у экземпляра UITableViewCell, и добавить его в качестве подпредставления в ячейку. Я почти там, но довольно много пикселей, чтобы не получить это идеальное прикосновение к нему. Есть ли лучший подход к этому, или, возможно, можно исправить мою точность размещения, чтобы получить идеальное выравнивание?

cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
    cell = [self tableviewCellWithReuseIdentifier:CellIdentifier];
}
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(0.0f, 5.0f, 320.0f, 44.0f)];

[button setTitle:@"Do Stuff" forState:UIControlStateNormal];
[button addTarget:self action:@selector(doStuff:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:button];

Ответы [ 9 ]

13 голосов
/ 05 декабря 2008

Вы можете подделать это в вашем didSelectRowAtIndexPath: метод Пусть ячейка tableView действует как кнопка.

[[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:YES animated:YES];
[self doStuff];
[[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:NO animated:YES];

Используйте setSelected: animated:, чтобы подделать нажатие кнопки, и она исчезнет. Могу сделать трюк для вас.

3 голосов
/ 06 апреля 2010

если вы хотите, чтобы он идеально подходил, просто назовите границы ячейки как ваш CGRect. сделай так:

button.frame = cell.bounds;

Это должно сделать вашу кнопку точно такой же, как ваша клетка. Надеюсь, это поможет!

Шнур

3 голосов
/ 02 июня 2009

Класс (UITableViewCell) имеет свойство contentView. Поэтому я поместил базовую кнопку в contentView переменной UITableViewCell.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ・・・
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(230.0f, 4.0f, 60.0f, 36.0f);
    [btn setTitle:@"OK" forState:UIControlStateNormal];
    [btn setTitle:@"OK" forState:UIControlStateSelected];
    [btn addTarget:self action:@selector(onClickRename:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:btn];
    ・・・
    return cell;
}

Извините, плохой мой английский.

0 голосов
/ 30 марта 2010
UIButton *btnView = [[UIButton alloc] init];
btnView.frame = CGRectMake(52.0f, 2.0f, 215.0f, 38.0f);
[btnView setImage:[UIImage imageNamed:@"invite.png"] forState:UIControlStateNormal];
[btnView addTarget:self action:@selector(showInviteByMail) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:btnView];
[btnView release];
0 голосов
/ 08 января 2009

FWIW, я поместил кнопку в своем приложении на CGRectMake (9, 0, 302, 45) и я думаю, что это выглядит идеально.

0 голосов
/ 07 декабря 2008

Вы также можете создать вид с помощью кнопки и поместить его в нижний колонтитул раздела над ним. Таким образом, вам не нужно беспокоиться об изображении клетки на заднем плане. Я сделал это, чтобы поместить две кнопки половинной ширины рядом в сгруппированном табличном представлении.

0 голосов
/ 06 декабря 2008

Вы также можете добавить UIImage в UITableViewCell, чтобы ячейка выглядела как кнопка.

0 голосов
/ 06 декабря 2008

У меня была такая же проблема, как и у вас. И Райан дал вам ответ: используйте саму ячейку как кнопку с методом didSelectedRowAtIndexPath: *. 1001 *

0 голосов
/ 05 декабря 2008

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

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