你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS中UITableView Cell實現自定義單選功能

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

編輯:IOS開發綜合

今天分享下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,將參數更換,實現此效果。

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

【iOS中UITableView Cell實現自定義單選功能】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved