iOS中UITableView Cell實現(xiàn)自定義單選功能
今天分享下cell的單選,自定義的,不是下圖這種網(wǎng)上找到的打?qū)吹?,我搜了好久,基本上都是打?qū)吹奈恼?,就決定自己寫一篇?;旧献约旱腶pp都會有一個風(fēng)格吧,咱也不能一直用打?qū)吹姆绞饺プ觯雌饋硎遣皇呛躭ow)。
我們要實現(xiàn)的是下面的這種形式。瞬間好看了很多,高大上了很多是吧。
具體我來給大家介紹一下。我這種方法有可能不是很好,有大神來,歡迎多多交流。
首先在你自定義的cell里面加入一個UIImageView,因為你肯定要有選擇和未選擇兩張圖片的吧,所以這個UIImageView來切換圖片。
@property(nonatomic,strong)UIImageView *seletImage;
注意:這里面為啥沒用button,我主要考慮的是按鈕如果只有一個小圓圈這么大的話,就不好點擊。我的方法主要是結(jié)合UITableView中didSelectRowAtIndexPath這個代理方法實現(xiàn)的。
當(dāng)然,你需要在你自己的cell里面加入這個子視圖,以及初始化這個對象。下面代碼寫在相應(yīng)的位置。
//添加到cell上 [self.contentView addSubview:self.seletImage]; //初始化 -(UIImageView *)seletImage{ if (!_seletImage) { _seletImage = [[UIImageView alloc]init]; } return _seletImage; } //坐標(biāo)位置 [self.seletImage mas_makeConstraints:^(MASConstraintMaker *make) { @strongify(self); make.right.equalTo(self.contentView.mas_right).with.offset(-15); make.centerY.equalTo(self.self.contentView); make.height.mas_equalTo(22); make.width.mas_equalTo(22); }];
然后我們還需要一個cell的ViewModel來記錄cell中的各種數(shù)值變化,在這個ViewModel里我們加入一個參數(shù)用來判斷是否這一行cell被點擊。
@property(nonatomic)BOOL isSelected;
然后在回到這個cell中,我們需要用RAC來觀察這個isSelected的參數(shù)變化,替換圖片
[[[RACObserve(self.viewModel, isSelected) takeUntil:self.rac_prepareForReuseSignal] deliverOnMainThread] subscribeNext:^(NSString *x){ @strongify(self); if ([x boolValue]==YES) { [self.seletImage setImage:[UIImage imageNamed:@"alarmsetting_selected"]]; }else{ [self.seletImage setImage:[UIImage imageNamed:@"alarmsetting_notselected"]]; } }];
好了,最后一步,讓我們回到這個cell對應(yīng)的ViewController中,在didSelectRowAtIndexPath上做文章。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; //遍歷viewModel的數(shù)組,如果點擊的行數(shù)對應(yīng)的viewModel相同,將isSelected變?yōu)閅es,反之為No for (NSInteger i = 0; i<[self.viewModel.ItemArray count]; i++) { ItemViewModel *itemViewModel = self.viewModel.ItemArray[i]; if (i!=indexPath.row) { itemViewModel.isSelected = NO; }else if (i == indexPath.row){ itemViewModel.isSelected = YES; } } [self.tableView reloadData]; }
這里簡單解釋一下,因為每一個cell都有一個對應(yīng)的ViewModel,這個ViewModel又是放在ViewController的ViewModel數(shù)組中的。因此遍歷,取出對應(yīng)點擊行數(shù)的ViewModel,將參數(shù)更換,實現(xiàn)此效果。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IOS使用NSUserDefault去實現(xiàn)界面?zhèn)髦岛蛿?shù)據(jù)存儲
這篇文章主要介紹了IOS使用NSUserDefault去實現(xiàn)界面?zhèn)髦岛蛿?shù)據(jù)存儲的相關(guān)資料,需要的朋友可以參考下2017-07-07iOS實現(xiàn)調(diào)用QQ客戶端發(fā)起臨時會話
本篇文章主要給大家詳細(xì)分析了用IOS實現(xiàn)調(diào)用QQ客戶端發(fā)起臨時會話的功能,對此有需要的朋友收藏分享下。2018-02-02混合棧跳轉(zhuǎn)導(dǎo)致Flutter頁面事件卡死問題解決
這篇文章主要為大家介紹了混合棧跳轉(zhuǎn)導(dǎo)致Flutter頁面事件卡死問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08iOS封裝倒計時按鈕HLCountDownButton示例詳解
這篇文章主要為大家介紹了iOS封裝倒計時按鈕HLCountDownButton示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07