iPhone - 在UITableView中向所选行添加按钮

时间:2011-05-26 18:15:36

标签: iphone uitableview button row cell

我正在使用XCode的基于导航的应用程序模板来创建一个以UITableView为中心的应用程序。


当用户在UITableView中选择一行时,我想在所选单元格内部显示一个按钮。我想只在选定的单元格中显示此按钮,而不是在任何其他单元格中。如果用户之后选择不同的小区,则同样如此。


我该怎么做呢?有可能吗?

4 个答案:

答案 0 :(得分:3)

UITableViewCell子类并添加按钮。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
        [button setFrame:CGRectMake(320.0 - 90.0, 6.0, 80.0, 30.0)]; 
        [button setTitle:@"Done" forState:UIControlStateNormal];
        button.hidden = YES;
        [self.contentView addSubview:button];
    }
    return self;
}

然后覆盖setSelected,如下所示:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
    self.button.hidden = !selected;
}

答案 1 :(得分:1)

应该可以使用以下内容:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (lastClickedCell != nil) {
        // need to remove button from contentView;
        NSArray *subviews = lastClickedCell.contentView.subviews;
        for (UIButton *button in subviews) {
            [button removeFromSuperview];
        }
    }
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    // this gives you a reference to the cell you wish to change;
    UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // you can change the type to whatever you want
    [cellButton setFrame:CGRectMake(x, y, w, h)]; // you will need to set the x,y,w,h values to what you want
    // if you want the button to do something, you will need the next line;
    [cellButton addTarget:self action:@selector(someMethod) forControlEvents:UIControlEventTouchUpInside];
    // now you will need to place the button in your cell;
    [cell.contentView addSubview:cellButton];
    [tableView reloadData];  // this updates the table view so it shows the button;
    lastClickedCell = cell;  // keeps track of the cell to remove the button later;
}
编辑:当您选择新单元格时,您当然需要从contentView中删除该按钮,因此您需要一点逻辑。子类化可能是一个更简单的解决方案,但如果您不想使用子类,则这是您需要采用的路径。例如,您需要在标题中声明以下内容。

UITableViewCell *lastClickedCell;

然后你会想把它加入到上面(我将改为把它放进去);

答案 2 :(得分:0)

您是否查看了developer.apple.com以获取UITableViewController和UIButton的文档?

答案 3 :(得分:0)

这是一个简单的解决方案!

  1. 在viewDidLoad函数之类的地方创建你的按钮(确保它在.h文件中声明,以便你可以从任何地方引用它)

  2. 在 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

  3. 添加以下内容:

      if (yourButton)
                [yourButton removeFromSuperview];
    
            [[tableView cellForRowAtIndexPath:indexPath] addSubview:yourButton];
            [yourButton setSelected:NO]; 
            [yourButton setHighlighted:NO];