【iOS開發(fā)】解決 UITableview 中選中 Cell 后,Cell 復用導致選中狀態(tài)消失、應用閃退的問題

如圖,是一個可以多項選擇的 UITableview,但是因為 iOS 的 Cell 復用機制,即下面的 reuseIdentifier 部分

let cell:UITableViewCell=UITableViewCell(style:UITableViewCellStyle.Subtitle, reuseIdentifier:"發(fā)型cell")

導致 UITableViewCell 的 UITableViewCellAccessoryType,在點選之后可以更改為 Checkmark狀態(tài),但是當頁面滾動至不可見某個Cell,再滾動回來時,Cell 的 Checkmark狀態(tài)消失了。


如圖,selectCell的狀態(tài)可以即時更改,選中 或 取消選中,但是這只是改變了界面,并沒有改變數(shù)據(jù)源。

當頁面滑動時,我們標記為Checkmark的Cell會被復用,從而丟失這個狀態(tài)。

所以我采用了NSMutableSet用來存儲Cell的 indexPath,從而便于之后 cellForRowAtIndexPath 方法中按照NSMutableSet中的內容,來將之前選擇過的 Cell 標記 Checkmark(打勾)

需要注意的是,一開始我采用了Array(不是NSArray)來存儲indexPath,用Array的removeAtIndex和append來移除、加入數(shù)據(jù),

但是莫名其妙地產生了一些不好的影響:

? ? ? ? 因為你總是需要遍歷數(shù)組來在 cellForRowAtIndexPath 方法中,查看哪些cell是應該被選中過的,然后改成Checkmark狀態(tài);

? ? ? ? 結果就可能會產生數(shù)組越界、App崩潰,以及錯誤的indexPath被append進數(shù)組的情況。

而NSMutableSet的功能更適合這種情況:它有addObject、removeObject、containsObject三個方法。

在 cellForRow 方法中,不需要for循環(huán)可以三行代碼給cell加Checkmark標記。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容