[英]One click, multiple actions Custom Cell of TableView
我創建了一個自定義單元,其中帶有一個帶有特定圖像的按鈕。 現在,根據某些條件,我將圖像設置為image1.jpg
或image2.jpg
。
通過創建一個協議創建自定義單元,在該協議中,我單擊該按鈕動作,在主界面中注意到,該按鈕已按下,並且將參數作為參數傳遞給實例。
現在的問題是,當我單擊特定單元格中的該按鈕時,我更改了cell.button
的圖像, cell.button
,當我向下滾動時, 我看到還有其他單元格也更改了其圖像 。
知道為什么會這樣嗎?
由於UITableView對單元的重用,當單元移出屏幕時,它將移到隊列中,然后在有新單元要加載時重用。
如果要保持每個單元格的屬性唯一,則每次都必須重新構造其值。 為此,您可以保留某種存儲每個單元格狀態/條件的數據數組。 數組將由tableView的indexPath排序,然后您可以根據indexPath從數組中獲取狀態並將單元格更新為正確的圖像。
發生的情況是,當您更改單元格的圖像並隨后向下或向上滾動時,您的單元格將被重用於顯示其他信息。
若要解決您應該檢查UITableView數據源的問題,請查看是否在這種方法中重復使用了單元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我建議先配置單元格,然后再使用前面的方法返回它,然后為該按鈕分配適當的圖像。
為此,您需要某種機制來記住每個單元的狀態。
有關單元重用和單元的一般信息,您可以轉到Apple文檔UITableViewCell
如上面的答案中所述,您可以管理數組中按鈕的選擇狀態和未選擇狀態,甚至可以在用於顯示數據的數組中添加一個鍵。
在表的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];
謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.