2014-04-06 72 views
0

我的表視圖在每行內部包含一個uibutton,具體取決於用戶是否已兌換它,我想更改它的圖像以及它是禁用還是啓用。在TableViewCell中更新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和row,尤其是當以後再回來的時候。我的問題是,列表項5下方更靠近新按鈕狀態。我如何解決這個問題,因爲我只想更新指定的按鈕?

+1

你可以分享你充分的cellForRowAtIndexPath? – Rashad

+0

我猜想單元格向下使用「itemZeroRedeemed」也是關鍵。這可能是由細胞回覆機制造成的。分享更多的代碼,特別是'cellForRowAtIndexPath'。 –

回答

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; 
} 
+0

謝謝安東尼奧!對於我有多個項目的情況,我需要多個其他項目還是隻有一個在底部?例如,我打算用5個不同的項目來做你發佈的答案。每個人都需要自己的其他命令,或者只有一個在底部。 – KingPolygon

+0

那麼通常我在創建/重用單元之後有一個初始重置塊,然後我有多個配置塊。請注意,如果您要使用的單元格種類很多,最好通過將具有不同重用標識符的多個原型單元放入同一個UITableView中,直接在故事板中對它們進行區分 –