UIButton覆盖UITableViewCell

时间:2008-12-05 19:56:56

标签: iphone

我希望我的一个表行成为占据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 个答案:

答案 0 :(得分:13)

您可以在didSelectRowAtIndexPath:方法中伪造它。 将tableView单元格用作按钮。

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

使用setSelected: animated:伪造按钮并让它褪色。 可能会为你做伎俩。

答案 1 :(得分:3)

Class(UITableViewCell)具有contentView属性。 所以我把基本按钮放在UITableViewCell变量的contentView中。

- (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;
}

抱歉,我的英语很差。

答案 2 :(得分:3)

如果你想要它完全适合,只需将单元格的边界称为CGRect。这样做:

button.frame = cell.bounds;

这应该让你的按钮与你的细胞完全一样。希望有所帮助!

线

答案 3 :(得分:0)

这可能不是重点,但是每次重复使用单元格时,您的代码可能会出现另一个按钮添加到单元格的问题。

答案 4 :(得分:0)

我和你有同样的问题。 Ryan给出了答案:使用单元格本身作为带有didSelectedRowAtIndexPath:方法的按钮。

答案 5 :(得分:0)

您还可以添加一个UIImage添加到UITableViewCell,使单元格看起来像一个按钮。

答案 6 :(得分:0)

您还可以使用按钮创建视图,并将其放置在其上方部分的页脚中。这样您就不必担心背景中的单元格图像。我这样做是为了将两个半宽按钮并排放置在一个分组的表视图中。

答案 7 :(得分:0)

FWIW,我把按钮放在我的应用程序CGRectMake(9,0,302,45) 我觉得它看起来很完美。

答案 8 :(得分:0)

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];