大家在做程序的時候,可能會遇上一種情況,需要遍歷tableview中所有cell,並分別給cell中的控件賦值,或者修改他的屬性。例如,在做網購程序的購物車中,都會有全選這個按鈕,單擊全選就會將所有cell中的小得勾選按鈕設置成被選中的狀態,從而該變他的狀態和圖片。
但是問題也沒那麼簡單,XCODE並允許開發者直接獲取所有的tableViewCell,這時候我們用遍歷的方法來獲取cell也只能獲得visbleCells這個屬性,也是就當前頁面所顯示的cell,我們先看看代碼:
- (IBAction)btnAction:(UIButton*)sender {
//獲取可見cells
visibleCells = visibleTableView.visibleCells;
for (UITableViewCell *cell in visibleCells) {
//cell中需要處理函數或屬性
}
}
這樣的話只能獲取當前頁面顯示的cell,但是這樣一來一旦拉動tableview其他沒有顯示的cell根本不會處於選中狀態,這種方法只適合小范圍的修改和變動。當然我們可以通過
//只返回當前不可見的cell
– (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier
這個方法來獲取不顯示的cell,我個人是不推薦的,考慮到talbleview的復用機制,我們即使是賦值了一次,當我們再次拖動tableview的時候,來回來一看,剛設置的屬性全都回到解放前了,那怎麼辦了。
辦法當然是有的,那就是定義一個可變的數組NSMutableArray,將其中需要用到的屬性用bool 或者0,1的方式存儲起來,並且在tableviewcell初始化方法中,用判斷的方式,來加載所需要變動的屬性,這樣tableview不論他如何的復用,我的數組始終不會被銷毀,一直控制著變量。