2014-05-07 139 views
0

我在做什麼

我有一個自定義單元格,它有一個帶有特定圖像的按鈕。現在取決於一些條件,我設置了該圖像image1.jpgimage2.jpg單擊一次,多個操作TableView的自定義單元格

我怎麼做

的自定義單元格是通過創建一個協議,其中我點擊該按鈕動作創建的,我注意到在主界面中,按下按鈕,我作爲參數傳遞的按鈕實例。

問題現在

,問題是,當我點擊一個特定的細胞那個按鈕,我改變cell.button的形象,也有,當我向下滾動,我看到有其他細胞已經改變了他們的形象

任何想法爲什麼會發生這種情況?

+2

是的,這是由於細胞再利用。當一個單元格在屏幕上滾動時,它將進入重用隊列,並在另一行中重用。如果這是一個您不熟悉的概念,那麼您應該閱讀「適用於iOS的Table View編程指南」。 – rdelmar

+0

@Erid Bardhaj添加你的didselect方法代碼 –

+0

@rdelmar是的,我很熟悉,我沒有設置每個屬性的圖像。於是我宣佈了該按鈕的出口,並在tableView cellForRowAtIndexPath處更改了每個單元格的圖像,並將更改的索引保存在特定數組中! DarshanKunjadiya我沒有使用它,因爲我點擊了自定義單元格的按鈕。 – EridB

回答

1

由於UITableView對單元的重用,當單元移出屏幕時,它將移動到一個隊列中,然後在有新單元加載時重新使用。

如果你想保持每個單元格的屬性是唯一的,那麼每次都必須重新構造它的值。爲此,您可以保留某種存儲每個單元的狀態/狀態的數據數組。該數組將按照tableView的indexPath排序,然後您可以根據indexPath從數組中獲取狀態,並將該單元格更新爲正確的圖像。

1

發生的事情是,當您更改單元格的圖像,然後向下或向上滾動時,您的單元格將被重用以顯示其他信息。
爲了解決這個問題,你應該檢查你的UITableView數據源,看看你在這個方法再利用細胞:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 


我建議你在前面的方法返回之前將單元配置,並在此時爲該按鈕分配適當的圖像。
爲了實現這一點,你需要一些機制來記住每個單元格的狀態。

有關一般電池的再利用和電池,你可以去Apple Docs for UITableViewCell

1

更多信息,如上的回答,您可以在陣列用於管理按鈕選中和未選中狀態,說明你甚至可以在陣列中添加一個關鍵您正在使用數據來顯示。

和表didselect事件,您可以更改選定字段的關鍵是這樣

NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init]; 
      NSDictionary *oldDict = self.dict_trans_Details ; 
      [newDict addEntriesFromDictionary:oldDict]; 
      [newDict setObject:status forKey:@"transactionstatusid"]; 
      [table_transdetails_array replaceObjectAtIndex:self.indexValue withObject:newDict]; 

感謝。

+0

是的,我想通了,不過謝謝! – EridB

相關問題