亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

iOS中UITableView Cell實(shí)現(xiàn)自定義單選功能

 更新時(shí)間:2017年02月18日 16:59:03   作者:蘭州拉面nick  
本篇文章主要介紹了iOS中UITableView Cell實(shí)現(xiàn)自定義單選功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

今天分享下cell的單選,自定義的,不是下圖這種網(wǎng)上找到的打?qū)吹?,我搜了好久,基本上都是打?qū)吹奈恼?,就決定自己寫一篇?;旧献约旱腶pp都會(huì)有一個(gè)風(fēng)格吧,咱也不能一直用打?qū)吹姆绞饺プ觯雌饋?lái)是不是很low)。

我們要實(shí)現(xiàn)的是下面的這種形式。瞬間好看了很多,高大上了很多是吧。

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

首先在你自定義的cell里面加入一個(gè)UIImageView,因?yàn)槟憧隙ㄒ羞x擇和未選擇兩張圖片的吧,所以這個(gè)UIImageView來(lái)切換圖片。

@property(nonatomic,strong)UIImageView *seletImage;

注意:這里面為啥沒(méi)用button,我主要考慮的是按鈕如果只有一個(gè)小圓圈這么大的話,就不好點(diǎn)擊。我的方法主要是結(jié)合UITableView中didSelectRowAtIndexPath這個(gè)代理方法實(shí)現(xiàn)的。

當(dāng)然,你需要在你自己的cell里面加入這個(gè)子視圖,以及初始化這個(gè)對(duì)象。下面代碼寫在相應(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);
 }];

然后我們還需要一個(gè)cell的ViewModel來(lái)記錄cell中的各種數(shù)值變化,在這個(gè)ViewModel里我們加入一個(gè)參數(shù)用來(lái)判斷是否這一行cell被點(diǎn)擊。

@property(nonatomic)BOOL isSelected;

然后在回到這個(gè)cell中,我們需要用RAC來(lái)觀察這個(gè)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"]];
  }
}];

好了,最后一步,讓我們回到這個(gè)cell對(duì)應(yīng)的ViewController中,在didSelectRowAtIndexPath上做文章。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  [tableView deselectRowAtIndexPath:indexPath animated:YES];

 //遍歷viewModel的數(shù)組,如果點(diǎn)擊的行數(shù)對(duì)應(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];
}

這里簡(jiǎn)單解釋一下,因?yàn)槊恳粋€(gè)cell都有一個(gè)對(duì)應(yīng)的ViewModel,這個(gè)ViewModel又是放在ViewController的ViewModel數(shù)組中的。因此遍歷,取出對(duì)應(yīng)點(diǎn)擊行數(shù)的ViewModel,將參數(shù)更換,實(shí)現(xiàn)此效果。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論