更新TableViewCell中的UIButton状态更改其他行

时间:2014-04-06 09:40:30

标签: ios objective-c uitableview uibutton

我的表格视图在每行中都包含一个uibutton,并且根据用户是否已兑换它,我想更改它的图像以及是否已禁用或启用它。

当用户购买项目时(比如项目0始终是第一行)我想通知我的应用程序它应该切换图像并禁用特定行的按钮。我使用NSUserDefaults来提醒我的tableView。

换句话说,如果用户点击第0项,则会询问他们是否要兑换或取消,如果用户按下兑换,我会执行以下操作:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"itemZeroRedeemed"];
[storeTableView reloadData];
我在我的cellForRowAtIndexPath中执行

if([[NSUserDefaults standardUserDefaults] boolForKey:@"itemZeroRedeemed"]) {
    if(indexPath.row == 0) {
        [cell.productInfoButton setBackgroundImage:[UIImage imageNamed:@"itemUnlocked"] forState:UIControlStateNormal];
        cell.productInfoButton.enabled = NO;
    }
}

它完美地工作,它正确地更新tableView和行,特别是在稍后返回时。我的问题是,列表项目5的下方也正在使用新的按钮状态进行更新。我怎么能解决这个问题,因为我只想更新指定的按钮?

1 个答案:

答案 0 :(得分:2)

问题是由于细胞重复使用机制。对于每个单元格,您应该重置默认状态,如下所示:

if([[NSUserDefaults standardUserDefaults] boolForKey:@"itemZeroRedeemed"] && indexPath.row == 0) {
    [cell.productInfoButton setBackgroundImage:[UIImage imageNamed:@"itemUnlocked"] forState:UIControlStateNormal];
    cell.productInfoButton.enabled = NO;
} else {
    [cell.productInfoButton setBackgroundImage:[UIImage imageNamed:@"__DEFAULT_IMAGE__"] forState:UIControlStateNormal];
    cell.productInfoButton.enabled = YES;
}