国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS中UITableView Cell實現自定義單選功能

2020-07-26 02:55:52
字體:
來源:轉載
供稿:網友

今天分享下cell的單選,自定義的,不是下圖這種網上找到的打對勾的,我搜了好久,基本上都是打對勾的文章,就決定自己寫一篇。基本上自己的app都會有一個風格吧,咱也不能一直用打對勾的方式去做(看起來是不是很low)。

我們要實現的是下面的這種形式。瞬間好看了很多,高大上了很多是吧。

具體我來給大家介紹一下。我這種方法有可能不是很好,有大神來,歡迎多多交流。

首先在你自定義的cell里面加入一個UIImageView,因為你肯定要有選擇和未選擇兩張圖片的吧,所以這個UIImageView來切換圖片。

@property(nonatomic,strong)UIImageView *seletImage;

注意:這里面為啥沒用button,我主要考慮的是按鈕如果只有一個小圓圈這么大的話,就不好點擊。我的方法主要是結合UITableView中didSelectRowAtIndexPath這個代理方法實現的。

當然,你需要在你自己的cell里面加入這個子視圖,以及初始化這個對象。下面代碼寫在相應的位置。

 //添加到cell上[self.contentView addSubview:self.seletImage];//初始化-(UIImageView *)seletImage{if (!_seletImage) {  _seletImage = [[UIImageView alloc]init];}return _seletImage;}//坐標位置[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中的各種數值變化,在這個ViewModel里我們加入一個參數用來判斷是否這一行cell被點擊。

@property(nonatomic)BOOL isSelected;

然后在回到這個cell中,我們需要用RAC來觀察這個isSelected的參數變化,替換圖片

  [[[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對應的ViewController中,在didSelectRowAtIndexPath上做文章。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{  [tableView deselectRowAtIndexPath:indexPath animated:YES]; //遍歷viewModel的數組,如果點擊的行數對應的viewModel相同,將isSelected變為Yes,反之為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都有一個對應的ViewModel,這個ViewModel又是放在ViewController的ViewModel數組中的。因此遍歷,取出對應點擊行數的ViewModel,將參數更換,實現此效果。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 耿马| 达日县| 海盐县| 新田县| 科尔| 晋江市| 政和县| 盖州市| 大悟县| 林州市| 中江县| 太谷县| 长宁县| 定南县| 涡阳县| 涟水县| 漾濞| 镇安县| 旬邑县| 若尔盖县| 杭锦后旗| 威海市| 连南| 长岛县| 岗巴县| 长宁区| 长葛市| 忻城县| 喜德县| 昭通市| 会理县| 木兰县| 阿城市| 临夏县| 盐津县| 乐亭县| 修武县| 杭锦后旗| 湘阴县| 珠海市| 中方县|