码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发-UITableView单选多选/复选实现1

时间:2015-07-25 18:35:19      阅读:716      评论:0      收藏:0      [点我收藏+]

标签:ios表视图   tableview单选多选   uitableviewcontrolle   

TableView如何实现单选或者多选呢?

我们的直接思路是修改某一个Cell的样式即可,

那么修改样式需要通过修改对应的数据,

从这里可以推断我们需要给Cell对应的数据设置一个标志位,

当选中的时候来修改该标志位刷新那一行即可

如果是单选实现稍微复杂一些:

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

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


我的实现如下:

(1)创建一个TableViewController,

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

设置重用标识符为 ACELL

cell对应的Model类为Person,

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

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

技术分享


(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


运行效果:

单选效果

技术分享


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




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

iOS开发-UITableView单选多选/复选实现1

标签:ios表视图   tableview单选多选   uitableviewcontrolle   

原文地址:http://blog.csdn.net/yangbingbinga/article/details/47057285

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!