在每个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的文字呢?感谢。
答案 0 :(得分:1)
@"0"
硬编码为标签的文本?如果您的目标是跟踪投票,则需要跟踪某些数据结构中的当前投票计数。然后根据数据的实际值设置每个单元格。然后可以在点击按钮时更新此数据。indexPath.row
会导致很多问题。有一个更好的方法可以从按钮获取单元格,而无需使用标签。以下假设您的班级中有一个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];
}