一些問題
重寫 UITableViewCell
的 - (void)setSelected:(BOOL)selected animated:(BOOL)animated{}
方法
- 結(jié)合
數(shù)據(jù)模型
進(jìn)行判斷,還是得另外寫方法,單獨(dú)處理數(shù)據(jù)模型
狀態(tài)癞蚕,然后再更新視圖,并沒有在系統(tǒng)方法內(nèi)處理好坷随。 - 禁止
TableView
的滾動(dòng),并不是很好的處理方式匠襟。小屏手機(jī)或者內(nèi)容過多時(shí)擦俐,還是可能需要滾動(dòng)望薄。
處理方式
針對(duì)滾動(dòng)事件,通過觀察滾動(dòng)事件代理函數(shù)审洞,以及cell
系統(tǒng)方法的調(diào)用:
向上滾動(dòng) TableView
時(shí)莱睁,查看日志:
scrollViewWillBeginDragging:
scrollViewWillEndDragging:withVelocity:targetContentOffset:
scrollViewDidEndDragging:willDecelerate:
scrollViewWillBeginDecelerating:
row:4 setSelected:0
row:4 setSelected:1
row:3 setSelected:0
row:3 setSelected:0
row:2 setSelected:0
row:2 setSelected:0
row:1 setSelected:0
row:1 setSelected:0
scrollViewDidEndDecelerating:
可以在scrollViewWillBeginDragging:
等前面 4 個(gè)方法中待讳,其中一個(gè)方法內(nèi)設(shè)置一個(gè)標(biāo)志,
然后在scrollViewDidEndDecelerating:
方法內(nèi)把清除標(biāo)志仰剿,
即可控制 cell 方法 - (void)setSelected:(BOOL)selected animated:(BOOL)animated{}
的刷新處理
示例
使用 weak
指針创淡,獲取 當(dāng)前tableView
的引用,在后面需要用到南吮。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// blablalbla....
cell.tableView = tableView; // 使用 weak
return cell;
}
在scrollView
代理函數(shù)中設(shè)置標(biāo)志琳彩,以及取消標(biāo)志
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
_tableView.tag = 201872;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
_tableView.tag = 0;
}
在自定義 cell
內(nèi) 的- (void)setSelected:(BOOL)selected animated:(BOOL)animated {}
方法中作判斷
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
NSLog(@"row:%@ setSelected:%@",@(self.indexPath.row),@(selected));
if (_multiChoose) { // 多選情況
// 說(shuō)明滾動(dòng)了TableView,直接返回
if (self.tableView.tag == 201872) {
NSLog(@"201872");
return;
}
// 選中 cell ,并且 之前 未選中 cell部凑,選中它B斗Α!涂邀!
if (selected && !_chooseButton.selected){
_answerLabel.textColor = UIColorFromHexRGB(0xfd9748);
_chooseButton.selected = YES;
}
// 取消選中 cell 瘟仿,并且 之前 選中 cell
else if (!selected && _chooseButton.selected){
// 不處理
}
// 選中 cell ,并且 之前 選中 cell比勉,取消選中@徒稀!浩聋!
else if (selected && _chooseButton.selected) {
_answerLabel.textColor = kDetailTextColor;
_chooseButton.selected = NO;
}
}