当用户点击它时,我需要更改UITableViewCell
内的值。
我需要通过UITableViewCell
内的值动画修改值。
现在,当用户点击UITapGestureRecognizer
时,我已实施UILabel
,如下所示:
UITapGestureRecognizer *tapOnAmount = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnBalance)];
[cell.amountLabel setUserInteractionEnabled:YES];
[cell.amountLabel addGestureRecognizer:tapOnAmount];
更改方法didTapOnBalance
中的值会导致应用崩溃,如下所示:
-(void)tapOnBalance{
NSString *headerIdentifier = @"HeaderCell";
HeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:headerIdentifier];
cell.amountLabel.text = @"new Value"; // this will crash because at runtime
// the compiler won't recognize cell.amountLabel...
}
在UITableViewCell
中实施此操作会导致我将HeaderTableViewCell
的值发送到子类,我也不知道如何执行此操作。
答案 0 :(得分:2)
你不能只是一个新的单元格,它不会给你用户点击的单元格 - 它会创建一个新的单元格。但是,如果您稍微更改了点击处理程序,则可以从手势中获取单元格的索引路径。
您需要稍微更改手势的初始化(查看选择器):
UITapGestureRecognizer *tapOnAmount = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnBalance:)];
[cell.amountLabel setUserInteractionEnabled:YES];
[cell.amountLabel addGestureRecognizer:tapOnAmount];
然后对您的处理程序进行另一次轻微更改:
- (void)tapOnBalance:(UITapGestureRecognizer *)sender
{
CGPoint location = [sender locationInView:self.view];
CGPoint locationInTableview = [self.tableView convertPoint:location fromView:self.view];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:locationInTableview];
// then you can either use the index path to call something like configureCell or send a didSelectRowAtIndexPath like this:
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
}
答案 1 :(得分:1)
您的代码完全错误。
当用户点击现有单元格并尝试更改该新单元格中显示的值时,您将创建一个新单元格。不要那样做。
相反,更改表视图的数据模型中的数据,然后告诉表视图重新加载该单元格(如ZAZ的答案中所述)。如果您更改了数据模型以反映单元格的新信息,请重新加载将使其与新设置一起显示。
答案 2 :(得分:0)
你必须实现didSelecRowAtIndexPath,并在更改值以为点击的行设置动画后在其中写入以下代码行
[self.myTableView reloadRowsAtIndexPaths:indexPath] withRowAnimation:UITableViewRowAnimationNone];
希望它有所帮助!