iOS开发-UITableViewController复选/多选实现2

iOS中如何实现多选?

基本思路是给cell绑定的数据设置一个标志位,

用来标识该cell是否被选中,

如果被选中则修改该标志位为YES,

并且把选中的行加入到可变数组中

如果选中时该标志位为YES则说明已经选中

那么此时需要需要把该标志位修改为NO

并且从选中数组中移除

实现过程,参考上一篇单选实现文章:http://blog.csdn.net/yangbingbinga/article/details/47057285:

(1)创建相关的TableViewController

使用系统的Cell

有Person类映射Cell的数据

还包括是否选中的标识位

(2)关键代码

//

//  TableViewController2.m

//  app39-表视图8-单选复选

//

//  Created by MRBean on 15/7/24.

//  Copyright (c) 2015年 yangbin. All rights reserved.

#import "TableViewController2.h"
#import "Person.h"

@interface TableViewController2 ()
@property(strong,nonatomic)NSMutableArray *marr;
@property(strong,nonatomic)NSMutableArray *selectRows;
@end

@implementation TableViewController2

- (void)viewDidLoad {
    [super viewDidLoad];
    _marr = [[NSMutableArray alloc]init];
    _selectRows = [NSMutableArray new];
    for (int i=0; i<20; i++)//产生大量假数据
    {
        Person *p = [[Person alloc]init];
        p.title = [NSString stringWithFormat:@"%iTitle",i];
        p.detail = [NSString stringWithFormat:@"%iDetail",i];
        p.ifSelected = NO;
        [_marr addObject:p];
    }
  }
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _marr.count;
}
- (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.detailTextLabel.text = p.detail;
      if(p.ifSelected)
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    else cell.accessoryType = UITableViewCellAccessoryNone;
        return cell;
}

//选中后改变数据

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

    Person *p = _marr[indexPath.row];
    if (p.ifSelected)//如果该行已经选择,则第二次是取消改行被选中
    {
        p.ifSelected = NO;//取消选中
        [_selectRows removeObject:@(indexPath.row)];//重数组中移除
    }
    else
    {
        p.ifSelected = YES;//选中
        [_selectRows addObject:@(indexPath.row)];
    }
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];//刷新该行
  //添加到数组中,此操作可能会导致有重复的数据
}
- (IBAction)tapSubmit:(UIBarButtonItem *)sender
{
    NSMutableString *mstr = [[NSMutableString alloc]initWithString:@"你选中的行数有:"];
    [_selectRows enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [mstr appendFormat:@"%@,",obj];
    }];
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:mstr message:nil delegate:nil cancelButtonTitle:@"我知道了" otherButtonTitles:nil, nil];

    [alert show];
}

@end

单选的实现:http://blog.csdn.net/yangbingbinga/article/details/47057285

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-26 03:46:44

iOS开发-UITableViewController复选/多选实现2的相关文章

ios开发 UITableViewController

iOS中显示数据列表最常用的一个控件,支持垂直滚动 UITableView的两种内置样式UITableViewStylePlain UITableViewStyleGrouped 数据源(dataSource)和代理(delegate)l? UITableView需要一个数据源(dataSource)来显示数据 ,UITableView会向数据源查询一共有多少行数据以及每一行显 示什么数据等.没有设置数据源的UITableView只是个空壳.凡 是遵守UITableViewDataSource协

iOS开发------简单实现图片多选功能(AssetsLibrary篇)

AssetsLibrary.framework是iOS7.0之前用来获取手机所有的媒体资源的一个静态库,在iOS8.0之后完全可以用Photo.framework来代替,但因为涉及到适配iOS7,所以这个库用的还是比较多的. 实际上,多选图片有很多很好用的第三方,但找到一个完全符合自己需求的第三方也不是那么容易,就算找到,如果不懂,也不是很好修改代码才对,所以了解一下这个库也是很有必要的,这里就记录一下过程中的认识与问题. 如果小伙伴有什么好玩的库,还请介绍一下,很希望能和喜欢钻研技术的你们一起

iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3771047.html iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明: 点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162,不可修改. 2.显示数据,需要设置数据源,也有两种方式(成为数据源,遵守协议) 3.实现数据源里面的两个方法 1)返回一共有多少列 2)在这一列中一共有多少行 4.通过代理告诉它那一列的哪

复选框作为按钮 实现全选/不全选

$(function () {            $("#checkAll").click(function () {                $('input[name="infoids[]"]').attr("checked", this.checked);            });            var $subBox = $("input[name='infoids[]']");         

iOS UITableViewCell UITableVIewController 纯代码开发

iOS UITableViewCell UITableVIewController 纯代码开发 <原创> 1.纯代码 自定义UITableViewCell 直接上代码 ////// #import <UIKit/UIKit.h> @interface CodeTableViewCell : UITableViewCell @property (nonatomic, weak) UIImageView *iconView; @property (nonatomic, weak) UI

复选框全选/全部选

复选框全选/全部选 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript"> window.onload = function() { /* 全选按钮点击按钮以后,四个多选框全部被选中 */ // 为idcheckedAllBtn的按钮绑

layui 复选框checkbox 实现全选全选

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="layui/css/layui.css" media="all"> </head> &l

IOS开发之表视图(UITableView)

IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于数据的展示 我们都会选择表视图,比如通讯录和一些数据列表. 2.我们可以选择创建表视图也可以创建表视图控制器. (二)UITableView基本样式如下(1:UITableViewStylePlain(普通表视图),2:UITableViewStyleGroup(分组表视图)): (三)UITabl

简单的iOS开发实例

项目需求 写一个iPhone应用程序,要求可以输入名字,点击按钮后,会显示一段文字向输入的名字打招呼,例如输入“宝玉”,显示“你好,宝玉!” 需求分析 这是一个很简单的应用程序,包含一个文本输入框,一个文本显示框,一个按钮.输入名字到文本输入框,再点击按钮,这时文本显示框的文字就会变成“你 好,<名字>!”.但是要注意,如果用户输入为空,要有警告提示用户重新输入:如果用户输入文字太长,超过16个字符,要自动截断. 产品设计 根据项目需求,画出相应的产品原型图: 初始状态 初始时,文本输入框为空