
如圖,是一個可以多項選擇的 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標記。
