我的表格视图在每行中都包含一个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的下方也正在使用新的按钮状态进行更新。我怎么能解决这个问题,因为我只想更新指定的按钮?
答案 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;
}