点按即可更改UITableViewCell的值

时间:2014-10-24 18:36:24

标签: ios objective-c uitableview

当用户点击它时,我需要更改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的值发送到子类,我也不知道如何执行此操作。

3 个答案:

答案 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]; 

希望它有所帮助!