设置在uitableview单元格中添加的uilabel文本

时间:2014-07-06 16:55:51

标签: ios objective-c uitableview uibutton uilabel

在每个uitableview单元格中,有一个按钮和一个uilabel,例如下面的代码

ListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[ListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}


[cell.UIButton addTarget:self action:@selector(ButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
cell.UIButton.tag = indexPath.row;
cell.UILabel.text = @"0";

我想要这个,当我点击按钮时,与uibutton在同一个单元格的uilabel.text将添加一个,我再次点击,uilabel.text将再添加一个,比如投票。

- (IBAction)ButtonClicked:(UIButton *)sender
{
  NSInteger selectedRow = sender.tag;
}

那么如何更改uilabel的文字呢?感谢。

1 个答案:

答案 0 :(得分:1)

  1. 为什么要将字符串@"0"硬编码为标签的文本?如果您的目标是跟踪投票,则需要跟踪某些数据结构中的当前投票计数。然后根据数据的实际值设置每个单元格。然后可以在点击按钮时更新此数据。
  2. 如果可以添加,删除或移动行,则将按钮的标记设置为indexPath.row会导致很多问题。有一个更好的方法可以从按钮获取单元格,而无需使用标签。
  3. 以下假设您的班级中有一个NSMutableArray ivar(_votes)作为投票计数的数据来源。

    现在您的cellForRowAtIndexPath变为:

    ListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[ListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        [cell.UIButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    }
    
    NSNumber *votes = _votes[indexPath.row];    
    cell.UILabel.text = [NSString stringWithFormat:@"%@", votes];
    

    您的按钮操作变为:

    - (void)buttonClicked:(UIButton *)button {
        CGPoint pointInTable = [button convertPoint:CGPointMake(5, 5) toView:self.tableView];
        NSIndexPath *path = [self.table indexPathForRowAtPoint:pointInTable];
    
        NSNumber *oldVote = _votes[path.row];
        NSNumber *newVote = @([oldVote intValue] + 1);
        _votes[path.row] = newVote;
    
        [self.tableView reloadRowsAtIndexPaths:@[ path ] withRowAnimation: UITableViewRowAnimationFade];
    }