iOS tableView实现单选和多选的实例代码

今天在项目中遇到了tableView的单选需求,现在总结一下,用一个简单的demo实现了简单的单选和多选两个功能.先看下效果图:

1:首先实现下单选

1:使用一个变量记录选中的行

@property (assign, nonatomic) NSIndexPath    *selIndex;   //单选选中的行

2:设置tableView数据,共2组,每组10行,

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return 10;
}

3:实现tableView的点击方法,每次点击记录点击的索引,取消之前的选择行,将当前选择的行打钩

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    //取消之前的选择
    UITableViewCell *celled = [tableView cellForRowAtIndexPath:_selIndex];
    celled.accessoryType = UITableViewCellAccessoryNone;

    //记录当前的选择的位置
    _selIndex = indexPath;

    //当前选择的打钩
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

4:列表滚动时,判断是否为选中的行,如果是cell是选中的那一行,就设置cell的accessoryType为UITableViewCellAccessoryCheckmark,到这里单选就实现完成了

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  static NSString *cellid = @"cellid";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellid];
  if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
  }
  cell.textLabel.text = [NSString stringWithFormat:@"第%zi组,第%zi行",indexPath.section+1,indexPath.row];

  if (_selIndex == indexPath) {
     cell.accessoryType = UITableViewCellAccessoryCheckmark;
  }else{
     cell.accessoryType = UITableViewCellAccessoryNone;
  }
  return cell;
}

2:下面实现多选

1:使用一个数组记录选中的行

@property (strong, nonatomic) NSMutableArray  *selectIndexs; //多选选中的行

2:使用一个变量判断是单选还是多选状态

@property (nonatomic, assign) BOOL       isSingle;    //单选还是多选

3:导航栏右侧按钮设置为单选和双选的切换按钮,并初始化多选记录数组

UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithTitle:@"多选" style:UIBarButtonItemStylePlain target:self action:@selector(singleSelect)];
  self.navigationItem.rightBarButtonItem = rightItem;

  //初始化多选数组
  _selectIndexs = [NSMutableArray new];

4:点击导航栏上的切换按钮切换单选还是多选状态

//单选还是多选按钮点击事件
-(void)singleSelect{
  _isSingle = !_isSingle;
  if (_isSingle) {
    self.navigationItem.rightBarButtonItem.title = @"多选";
    self.title = @"(单选)";
    //切换为单选的时候,清除多选数组,重新加载列表
    [self.selectIndexs removeAllObjects];
    [self.tableView reloadData];
  }else{
    self.title = @"(多选)";
    self.navigationItem.rightBarButtonItem.title = @"单选";
  }
}

5:为tableView的点击方法中加上单选还是多选的状态判断,多选的话,将点击的行加入到多选索引数组中去,然后改变该行的cell.accessoryType,重复点击就做反操作

//选中某一行
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

  if (_isSingle) {    //单选
    //取消之前的选择
    UITableViewCell *celled = [tableView cellForRowAtIndexPath:_selIndex];
    celled.accessoryType = UITableViewCellAccessoryNone;

    //记录当前的选择的位置
    _selIndex = indexPath;

    //当前选择的打钩
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

  }else{           //多选
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { //如果为选中状态
      cell.accessoryType = UITableViewCellAccessoryNone; //切换为未选中
      [_selectIndexs removeObject:indexPath]; //数据移除
    }else { //未选中
      cell.accessoryType = UITableViewCellAccessoryCheckmark; //切换为选中
      [_selectIndexs addObject:indexPath]; //添加索引数据到数组
    }
  }
}

6:在cellForRow代理方法中同样加入单选多选的判断,在滚动列表是加载列表,判断是否选中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  static NSString *cellid = @"cellid";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellid];
  if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
  }
  cell.textLabel.text = [NSString stringWithFormat:@"第%zi组,第%zi行",indexPath.section+1,indexPath.row];

  if (_isSingle) {      //单选
    if (_selIndex == indexPath) {
      cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }else{
      cell.accessoryType = UITableViewCellAccessoryNone;
    }
    return cell;
  }else{           //多选
    cell.accessoryType = UIAccessibilityTraitNone;
    for (NSIndexPath *index in _selectIndexs) {
      if (indexPath == index) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
      }
    }
  }
  return cell;
}

到这里就完成了,没什么技术含量,有需求的可以参考下,有好的想法可以多多交流,项目在github的地址.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • iOS实现手机获取验证码倒计时效果

    手机获取验证码的倒计时效果,实现很简单,附倒计时效果完整代码 之前做项目使用的是NSTimer做的倒计时效果,效果不太好.今天学习了下用GCD做,效果还是不错的. 关键代码如下:(完整代码) //创建一个全局并非队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //创建一个定时器 _timer = dispatch_source_create(DISPATCH_SO

  • iOS模仿微信长按识别二维码的多种方式

    参考:https://github.com/nglszs/BCQRcode 方式一: #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end ************** #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDid

  • iOS 实现类似QQ分组样式的两种方式

    思路 思路很简单,对模型数据操作或则控制界面显示 先看下json部分数据 "chapterDtoList": [{ "token": null, "id": 1295, "chapterName": "第一章", "parentId": 0, "chapterLevel": 0, "attachmentUrl": "", &qu

  • IOS 禁止缩放页面的实现方法

    IOS 禁止缩放页面的实现方法 在ios10前我们能通过设置meta来禁止用户缩放页面: <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" /> 在ios10系统中meta设置失效了: 为了提高Safari中网站的辅助功能,即使网站在视口中设置了user-scalable = no,用户也可以

  • iOS之Cocoapods安装教程(全面解析)

    网上关于cocoapods的教程很多,关于它的优点我不赘述:但是我根据多次安装的经验,把我遇到的问题写一下,希望对新手有所帮助: 1. 设置输入源(由于默认的gem资源是国外的,由于历史原因,访问比较慢,所以需要改为国内的) 删除原来的: $ sudo gem sources --remove https://rubygems.org/ 添加新的 $ sudo gem sources -a https://ruby.taobao.org/ 出现如下提示,即为设置成功 $ sudo gem sou

  • iOS粒子路径移动效果 iOS实现QQ拖动效果

    粒子效果,QQ拖动效果,实现很简单,具体代码如下 一.图示 二.分析 我们要实现的如果如上面的图示,那么我们可以按照下面的步骤操作: 第一步:我们的红点其实是一个UIButton.创建一个BageValueView继承自UIButton 第二步:初始化的时候,初始化控件,设置圆角,修改背景.文字颜色 第三步:添加手势.在手势的处理中我们,我们需要让当前控件随着手指移动而移动. 第四步:控件一开始创建的时候,其实有两个圆,一个就是我们能够拖动的大圆,另外一个就是原始位置上会改变大小的圆.这一步骤中

  • iOS如何实现强制转屏、强制横屏和强制竖屏的实例代码

    本文介绍了iOS如何实现强制转屏.强制横屏和强制竖屏的实例代码,分享给大家 今天项目中遇到正在看视频的时候账号被挤,如果当时是横屏的情况下,需要强制竖屏.真头疼,网上找了好多方法,终于解决啦.O(∩_∩)O~ 强制横屏: [self interfaceOrientation:UIInterfaceOrientationLandscapeRight]; 强制竖屏: [self interfaceOrientation:UIInterfaceOrientationPortrait]; 强制转屏 -

  • iOS tableView实现单选和多选的实例代码

    今天在项目中遇到了tableView的单选需求,现在总结一下,用一个简单的demo实现了简单的单选和多选两个功能.先看下效果图: 1:首先实现下单选 1:使用一个变量记录选中的行 @property (assign, nonatomic) NSIndexPath *selIndex; //单选选中的行 2:设置tableView数据,共2组,每组10行, - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { ret

  • Android实现单选与多选对话框的代码

    android开发中实现单选与多选对话框的代码非常简单,具体代码如下所示: public void myClick(View view) { // 单选对话框 //singleCheckDialog(); // 多选对话框 mulCheckDialog(); } private void mulCheckDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("标题"

  • iOS中创建表格类视图WBDataGridView的实例代码

    项目中创建表格, 引用头文件 #import "WBDataGridView.h" - (void)viewDidLoad{ [superviewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColorwhiteColor]; CGFloat margin = 10.f; CGFloat width = self.view.frame.size.wi

  • iOS开发中Swift 指纹验证功能模块实例代码

    iOS调用TouchID代码: override func viewDidLoad() { super.viewDidLoad() let context = LAContext() var error: NSError? = nil let canEvaluatePolicy = context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) as Bool if error

  • 基于JS实现checkbox全选功能实例代码

    需求:要求实现点击全选选中所有菜单,再次点击全选取消选中.此功能经常会用户,下面小编给大家分享下实现代码,一起看看吧! 效果图如下: 点击全选之前: 点击全选之后: 再次点击全选之后: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> &l

  • iOS实现左右可滑动的选择条实例代码分享

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController @end RootViewController.m #import "RootViewController.h" //引入头文件 #import "SVSegmentedControl.h" @interface RootView

  • javascript实现checkbox复选框实例代码

    本文实例介绍了javascript实现checkbox复选框实例代码以及对checkbox复选框进行美化操作,分享给大家供大家参考,具体内容如下 1.checkbox复选框进行美化操作 复选框默认外表的美观度差强人意,能够满足美观度要求不高的页面,但是如果对于页面要求较为精致,那可能就过于勉强了,下面就一段对复选框进行美化的代码实例,希望能够给大家带来一定的帮助. 代码实例如下: <!DOCTYPE html> <html> <head> <meta charse

  • jquery 实现复选框的全选操作实例代码

    jquery 实现复选框的全选操作实例代码 最近做了个需求,需要实现列表复选框的全选/取消全选操作,由于之前对这块不是很了解,所以从网上查了一些资料,虽然有各种实现方法,但没找到直接可以套用的.自己琢磨了下,把功能实现,整理如下. 实现细节如有可改进的地方,不吝赐教. 首先是html部分的代码,这里有一个表格,表格里面有一些选项: <div id="list"> <table> <tr><td>选项1<input type=&quo

  • IOS NSUserDefault 记住用户名及密码功能的实例代码

    一般的登录界面都会有一个记住密码的选项,要实现这个功能可以使用NSUserDefault,这里只是讲解明文的处理方式,虽然这样是有一定的风险性的但是目前只是了解如何实现这个功能: 首先声明一个NSUserDefault对象: let userDefaults = NSUserDefaults.standardUserDefaults() //本地操作所需 然后根据是否记住密码按钮的状态来判断是否要为用户名和密码设置值,如果是记住密码,那么需要取出需要记住的密码,并且为这两个TextField赋值

  • 仿ios状态栏颜色和标题栏颜色一致的实例代码

    首先创建一个工具类 import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.os.Build; import android.support.v4.content.ContextCompat; import android.view.View; import android.view.ViewGroup; public clas

随机推荐