表视图中的按钮标记是否重置?

时间:2014-10-22 09:20:16

标签: ios objective-c xcode uitableview

我在我的故事板中放了一个tableview,并用一个标有“0”的按钮填充单元格。我使用数组填充了tableview。我只想说我的数组中有20个元素,这使得它在tableview上有20个单元格。这是我用来为每个单元格上的按钮添加标签的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == _tblCart) {
        static NSString *cellIdentifier = @"CartCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleGray;

        UIButton *btn = (UIButton *)[cell viewWithTag:0];
        [btn setTag:indexPath.row];
        [btn addTarget:self action:@selector(logTag:) forControlEvents:UIControlEventTouchUpInside];

        return cell;
    }
    return nil;
}

我认为我的代码运行得很好,但实际上有些问题。在单元格0-5上,按钮标记是正确的。在下面的单元格中,标签将再次重置为0.我做错了什么?

3 个答案:

答案 0 :(得分:1)

不要将0设置为视图的标记标识符 默认情况下,所有UIViews都有一个标签。

所以     [cell viewWithTag:0];
可能会返回单元格的contentView

答案 1 :(得分:1)

这里还有另一个逻辑问题,你正在重用表格单元格,其中一些你已经将按钮的标签更改为0以外的其他东西。所以如果你得到一个重复使用的tablecell,那么将会有一段时间UIButton的标签不会为零,因此您无法正确更改。

答案 2 :(得分:0)

Flexicoder和l0gg3r都是正确的。此外,在我看来,依赖按钮的标签作为行标识符是一个笨重的解决方法。考虑这种方法:

- (void)logTag:(UIButton *)sender {
  NSIndexPath *indexPath = [_tblCart indexPathForRowAtPoint:[_tblCart convertPoint:sender.center fromView:sender]];
  // do your stuff knowing which indexPath the button belongs to
}