【iOS開發】解決UITableview中選中Cell後,Cell複用導致選中狀態消失、應用閃退的問題
如圖,是一個可以多項選擇的 UITableview,但是因為 iOS 的 Cell 複用機制,即下面的 reuseIdentifier 部分
let cell:UITableViewCell=UITableViewCell(style:UITableViewCellStyle.Subtitle, reuseIdentifier:”髮型cell”)
導致 UITableViewCell 的 UITableViewCellAccessoryType,在點選之後可以更改為 Checkmark狀態,但是當頁面滾動至不可見某個Cell,再滾動回來時,Cell 的 Checkmark狀態消失了。
如圖,selectCell的狀態可以即時更改,選中 或 取消選中,但是這只是改變了介面,並沒有改變資料來源。
當頁面滑動時,我們標記為Checkmark的Cell會被複用,從而丟失這個狀態。
所以我採用了NSMutableSet用來儲存Cell的 indexPath,從而便於之後 cellForRowAtIndexPath 方法中按照NSMutableSet中的內容,來將之前選擇過的 Cell 標記 Checkmark(打勾)
需要注意的是,一開始我採用了Array(不是NSArray)來儲存indexPath,用Array的removeAtIndex和append來移除、加入資料,
但是莫名其妙地產生了一些不好的影響:
因為你總是需要遍歷陣列來在 cellForRowAtIndexPath 方法中,檢視哪些cell是應該被選中過的,然後改成Checkmark狀態;
結果就可能會產生陣列越界、App崩潰,以及錯誤的indexPath被append進陣列的情況。
而NSMutableSet的功能更適合這種情況:它有addObject、removeObject、containsObject三個方法。
在 cellForRow 方法中,不需要for迴圈可以三行程式碼給cell加Checkmark標記。
相關文章
- iOS 中tableview cell點選取消選中效果iOSView
- 淺談UITableView內Cell的選中細節過程UIView
- iOS 中 各種 Cell 和 HeaderView 複用iOSHeaderView
- 操作選中cell 所有cell操作相同情況下
- iOS 中 cell的用法iOS
- 解決POI中DateUtil.isCellDateFormatted(Cell cell)不能判斷中文日期的問題LDAORM
- UITableView的Cell複用原理和原始碼分析UIView原始碼
- iOS cell中webview自適應高度iOSWebView
- iOS初級開發學習筆記:tablevView中,點選cell後下部彈出下級列表,需實現cell高變化iOS筆記View
- UITableView動態計算Cell高度UIView
- iOS之移動中變化的cell(cell逐漸變大效果)iOS
- (iOS)點選cell推出現新介面iOS
- iOS UITableView Cell和 SectionHeader 的呼叫順序iOSUIViewHeader
- 解決IOS中input失焦後,頁面上移,點選不了問題iOS
- display:table-cell的應用
- iOS開發中的Scroll View應用詳解iOSView
- MUI TableViewCell 上按鈕點選Cell同時觸發解決UIView
- C# WinForm 取消DataGridView的預設選中Cell 使其不反藍C#ORMView
- 10.12UITableView(cell)UIView
- iOS應用程式中UITableView的效能優化(最全面)iOSUIView優化
- Web應用開發中的幾個問題Web
- 用 Nokitjs 解決前端開發中的跨域問題JS前端跨域
- iOS 點選UITableViewCell上的控制元件獲取對應的celliOSUIView控制元件
- iOS中webView巢狀tableView中動態高度問題iOSWebView巢狀
- iOS Cell巢狀UIWebView(內附UIWebView詳解)iOS巢狀UIWebView
- UITableView 自己封裝可以自適應高度的cellUIView封裝
- 好用的Vue狀態管理模式:淺談Vuet在實際應用中解決的問題Vue模式
- 解決html中input的placeholder的顏色,點選時消失,input點選時樣式的問題HTML
- vue-cli 預設路由再子路由選中下的選中狀態問題Vue路由
- iOS cell找對應的tableViewiOSView
- 【Objective-C】解決輕拍手勢事件與TableView的Cell點選事件衝突的問題Object事件View
- IOS 動態改變cell的高度iOS
- 類簇在iOS開發中的應用iOS
- 點選Cell控制UITableViewCell的展開及關閉UIView
- IIS應用程式回收導致應用中Hangfire等後臺任務無法正常啟動工作的解決方法
- [譯] Flutter 中的原生應用程式狀態Flutter
- win10應用商店閃退的解決方法Win10
- 開發Web應用程式中Cookie使用的問題 (轉)WebCookie