TableView怎样实现单选或者多选呢?

我们的直接思路是改动某一个Cell的样式就可以,

那么改动样式须要通过改动相应的数据,

从这里能够判断我们须要给Cell相应的数据设置一个标志位,

当选中的时候来改动该标志位刷新那一行就可以

假设是单选实现略微复杂一些:

单选须要设置一个属性来保存上一次选中的行,

待选中新的行之后须要改动该行,不断维护

我的实现例如以下:

(1)创建一个TableViewController,

为了简单使用系统的Cell样式

设置重用标识符为 ACELL

cell相应的Model类为Person,

Person是Cell上相应的数据还包含是否选中的标志位

(2)导航栏的左边button用来提交单选的结果,右边button用来跳转到复选的界面

(3)关键代码

Person数据类,为cell提供数据

ifSelected属性的YES 或者 NO关乎是否该行cell被标记

//
// Person.h
// app39-表视图8-单选复选
//
// Created by MRBean on 15/7/24.
// Copyright (c) 2015年 yangbin. All rights reserved.
// #import <Foundation/Foundation.h>
@interface Person : NSObject
@property(copy,nonatomic)NSString *title;//cell上的textLabel数据
@property(copy,nonatomic)NSString *detail;//cell上的detailLabel数据
@property(assign,nonatomic)BOOL ifSelected;//是否选中
@end

TableViewController

//
// TableViewController.m
// app39-表视图8-单选复选
//
// Created by MRBean on 15/7/24.
// Copyright (c) 2015年 yangbin. All rights reserved.
// #import "TableViewController.h"
#import "Person.h"
@interface TableViewController ()
@property(strong,nonatomic)NSMutableArray *marr;//数据来源
@property(strong,nonatomic)NSIndexPath *lastSelected;//上一次选中的额索引
@end @implementation TableViewController

//初始时产生假数据

- (void)viewDidLoad {
[super viewDidLoad];
_marr = [[NSMutableArray alloc]init];
for (int i=0; i<20; i++)//产生大量假数据,使用系统的Cell
{
Person *p = [[Person alloc]init];
p.title = [NSString stringWithFormat:@"%iTitle",i];
p.detail = [NSString stringWithFormat:@"%iDetail",i];
p.ifSelected = NO;//是否被选中,默认都是NO
[_marr addObject:p];
}
}

#pragma mark - 数据源

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _marr.count;
}

//配置每个cell的显示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ACELL" forIndexPath:indexPath];
Person *p = _marr[indexPath.row];
cell.textLabel.text = p.title;//cell上的title显示
cell.detailTextLabel.text = p.detail;
//下面为关键代码1
if(p.ifSelected)//是否选中,假设为YES则标记
cell.accessoryType = UITableViewCellAccessoryCheckmark;//勾标记
else cell.accessoryType = UITableViewCellAccessoryNone;//不标记
return cell;
}

//选中一行cell后改变数据

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *temp = self.lastSelected;//暂存上一次选中的行
if(temp && temp!=indexPath)//假设上一次的选中的行存在,而且不是当前选中的这一样,则让上一行不选中
{
Person *tp = _marr[temp.row];
tp.ifSelected = NO;//改动之前选中的cell的数据为不选中
[tableView reloadRowsAtIndexPaths:@[temp] withRowAnimation:UITableViewRowAnimationAutomatic];//刷新该行
}
self.lastSelected = indexPath;//选中的改动为当前行
Person *p = _marr[indexPath.row];
p.ifSelected = YES;//改动这个被选中的一行choon
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];//又一次刷新这一行
}

//点击提交,打印选中的结果

- (IBAction)tapSubmit:(UIBarButtonItem *)sender
{
Person *select = _marr[_lastSelected.row];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"你选择的是:" message:select.title delegate:nil cancelButtonTitle:@"我知道了" otherButtonTitles:nil, nil];
[alert show];
}

//收到内存警告

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

执行效果:

单选效果

下一篇:TableView复选的实现http://blog.csdn.net/yangbingbinga/article/details/47057747

相关文章:http://blog.csdn.net/yangbingbinga

iOS开发-UITableView单选多选/复选实现1的更多相关文章

  1. 自动化测试-15.selenium单选框与复选框状态判断

    本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了 ...

  2. 2.12 单选框和复选框(radiobox、checkbox)

    2.12 单选框和复选框(radiobox.checkbox) 本篇主要介绍单选框和复选框的操作一.认识单选框和复选框    1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是 ...

  3. Selenium2学习(十五)-- 单选框和复选框(radiobox、checkbox)

    本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了 ...

  4. 微信小程序-修改单选框和复选框大小的方法

    方法有两种: 一:采用css的zoom属性 zoom缩放会将元素保持在左上角,并且会有毛边,可能会稍稍改变元素原来的形状. 二:采用css3的transform:scale属性 zoom缩放会将元素保 ...

  5. Selenium3+python自动化 单选框和复选框

    一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了,可以先抽他了. 二.radio和 ...

  6. [原创]纯JS实现网页中多选复选框checkbox和单选radio的美化效果

    图片素材: 最终效果图: <html><title> 纯JS实现网页中多选复选框checkbox和单选radio的美化效果</title><head>& ...

  7. CSS学习笔记三:自定义单选框,复选框,开关

    一点一点学习CCS,这次学习了如何自定义单选框,复选框以及开关. 一.单选框 1.先写好body里面的样式,先写几个框 <body> <div class="radio-1 ...

  8. HTML--使用单选框、复选框,让用户选择

    在使用表单设计调查表时,为了减少用户的操作,使用选择框是一个好主意,html中有两种选择框,即单选框和复选框,两者的区别是单选框中的选项用户只能选择一项,而复选框中用户可以任意选择多项,甚至全选.请看 ...

  9. jQuery获取单选框(复选框)选中的状态

    jQuery 获取单选框(复选框)选中的状态 <input type="checkbox" name="" id="choose"/& ...

随机推荐

  1. 测试常用的linux命令

    一.系统 1.halt:         关机   poweroff: 关机 2.reboot:     重启 二.处理目录和文件的命令 1.ll:     显示文件详细信息 ls:    显示文件目 ...

  2. 设计模式:命令模式(Command Pattern)

    问题 某个类中需要定义一个方法,该方法要实现的功能不确定的,需要等到程序执行该方法的时候才确定下来. 例如:定义一个计算数组的方法,可能需要遍历输出数组,也有可能是需要对数组中元素求和. 解决方案 按 ...

  3. django insert data into mysql

    #!/usr/bin/python # -*- coding:utf-8 -*- # @filename: search # @author:wwx399777 wuweiji # @date: 20 ...

  4. 企业支付宝账号开发接口教程--JAVA-UTF-8(实际操作完善中...SpringMVC+JSP)

    关于即时到账的开发.审核通过.简单测试如下. 希望看的可以收藏或者赞一下哦. 1:拥有自己的支付宝企业账号.去产品商店选择适合自己的方案.并签约合同. 2:选择合适的商家收款产品并去签约.填写相应的信 ...

  5. JavaScript中函数的定义

    JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...

  6. IDM下载器使用方法详解:百度网盘下载,视频会员一网打尽!

    一. IDM的设置 [01]IDM插件与各大浏览器的集成 默认情况下,在成功安装IDM后,直接点击这里的选项,会弹出[常规设置],一般情况下直接保持默认的配置即可,如果你使用的是比较小众的浏览器,你可 ...

  7. tornado框架基础04-模板基础

    01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...

  8. 404 Not Found 由来

    404 NOT FOUND! 抱歉,沒有找到您需要的文章!! 什么是 404 Not Found 404页面是网站必备的一个页面,它承载着用户体验与SEO优化的重任.404页面通常为用户访问了网站上不 ...

  9. sql语句中嵌套2层循环

    declare @year intdeclare @month intset @year=2008 while(@year<=2011)beginset @month=1while(@month ...

  10. Flask--Config研究

    导入Flask框架后,在项目跟目录下面会有一个Config.py 文件,里面的默认内容为: class Config(object): pass 可以这Config 类里面定义变量和其他对象 如: c ...