IOS_UI_day7_UITableView_优化

来源:互联网 发布:php源码 网络验证 编辑:程序博客网 时间:2024/06/08 17:57
H:/IOS_UI/day7-00-UITableView总结笔记.m
一、UITableView的代理方法#pragma mark 每一行的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath#pragma mark 选中了某一行就会调用- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath#pragma mark 取消选中了某一行就会调用- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath#pragma mark 当用户提交了一个编辑操作就会调用(比如点击了“删除”按钮)// 只要实现了这个方法,就会默认添加滑动删除功能- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath#pragma mark 当移动了某一行cell就会调用// 只要实现了这个方法,就会默认添加排序功能- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath二、修改Cell的状态1.最好通过“修改模型数据”来修改Cell的状态2.修改步骤1> 修改模型数据2> 刷新表格* 整体刷新:reloadData(最重要)* 局部刷新:reloadRowsAtIndexPaths:withRowAnimation:三、UITableView常见方法1.取消选中某一行(去掉cell选中时默认的蓝色背景)- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;2.局部刷新(仅仅刷新indexPaths数组中装着的行)- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation3.整体刷新(屏幕中的每一行都刷新)- (void)reloadData;4.直接删除界面上的行数(要求模型数据也要删掉对应的数量)- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation5.设置编辑模式@property(nonatomic,getter=isEditing) BOOL editing; - (void)setEditing:(BOOL)editing animated:(BOOL)animated;// 注意:不管是局部刷新,还是整体刷新,原理都是:UITableView重新向数据源(dataSource)和代理(delegate)发送相应的消息,最终将得到的数据展示出来

H:/IOS_UI/day7-01-UITableView-性能优化的应用-MJViewController.h
////  MJViewController.h//  01-UITableView01-性能优化的应用////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <UIKit/UIKit.h>@interface MJViewController : UIViewController@property (weak, nonatomic) IBOutlet UILabel *titleLabel;@property (weak, nonatomic) IBOutlet UITableView *tableView;@property (weak, nonatomic) IBOutlet UIBarButtonItem *removeItem;- (IBAction)remove;@end

H:/IOS_UI/day7-01-UITableView-性能优化的应用-MJViewController.m
//  MJViewController.m//  01-UITableView01-性能优化的应用//  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.#import "MJViewController.h"#import "Shop.h"@interface MJViewController ()  <UITableViewDataSource, UITableViewDelegate>{    NSMutableArray *_shops;    NSMutableArray *_deleteShops; // 存放即将要删除的模型数据}@end@implementation MJViewController- (void)viewDidLoad{    [super viewDidLoad];    // 1.加载plist,array中装的每个元素,都是NSDictionary对象    NSString *path = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];//全路径    NSArray *array = [NSArray arrayWithContentsOfFile:path];        _shops = [NSMutableArray array];_deleteShops = [NSMutableArray array];// 2.将array中的字典元素填充到Shop模型对象,并将Shop模型对象添加到可变数组    for (NSDictionary *dict in array) {        // 2.1.创建模型//        Shop *s = [[Shop alloc] initWithDict:dict];        Shop *s = [Shop shopWithDict:dict];        // 2.2.并将Shop模型对象添加到可变数组        [_shops addObject:s];    }}#pragma mark 删除数据- (void)remove{    // 0.获得所有要被删除的数据的行号集合    NSMutableArray *deletePaths = [NSMutableArray array];//遍历,欲被删除的对象数组    for (Shop *s in _deleteShops) {//找出欲被删除的对象数组中的元素,在主数组中的索引,即为界面上的行号        int row = [_shops indexOfObject:s];//根据行号,创建NSIndexPath对象        NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];//添加到要被删除的NSIndexPath数组中        [deletePaths addObject:path];    }    // 1.首先,删除主模型数组中的数据(将_deleteShops中的所有对象元素从_shops中删除)    [_shops removeObjectsInArray:_deleteShops];    // 2.然后,再刷新表格,整体,或局部刷新均可//    [self.tableView reloadData];    [self.tableView deleteRowsAtIndexPaths:deletePaths withRowAnimation:UITableViewRowAnimationTop];    // 3.更改标题    _titleLabel.text = @"淘宝";    // 4.最后清空垃圾筒,即数组_deleteShops(清空已经删除的数据)    [_deleteShops removeAllObjects];    // 5.禁止删除按钮被人点击    _removeItem.enabled = NO;}#pragma mark - 数据源方法#pragma mark 多少行数据- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return _shops.count;}#pragma mark 每一行显示怎样的cell(内容)- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    // 1.定义一个可重用标识    static NSString *ID = @"cell";    // 2.去缓存池中取出可循环利用的cell    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];    // 3.如果缓存中没有可循环利用的cell,创建新cell,并记得指定标识    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];    }    // 4.设置每个cell独一无二的商品数据    // 4.0.取出indexPath这行对应的商品shop模型对象    Shop *s = _shops[indexPath.row];    // 4.1.独一无二的商品名称    cell.textLabel.text = s.name;    // 4.2.独一无二的商品描述    cell.detailTextLabel.text = s.desc;    // 4.3.独一无二的商品图片    cell.imageView.image = [UIImage imageNamed:s.icon];    // 4.4.检测打钩状态    // 如果_deleteShops数组中包含了s这个模型对象    if ([_deleteShops containsObject:s]) { // 需要打钩        cell.accessoryType = UITableViewCellAccessoryCheckmark;    } else { // 不需要打钩        cell.accessoryType = UITableViewCellAccessoryNone;    }    return cell;}#pragma mark - 代理方法#pragma mark 每一行的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return 70;}#pragma mark 监听cell的点击#pragma mark 选中了某一行就会调用- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{// 每个cell都有选中状态(selected)    // 家居 --> 未选中 selected = NO    // 美食 --> 选中 selected = YES    // 0.取消选中这一行(去掉cell默认的蓝色背景)    [tableView deselectRowAtIndexPath:indexPath animated:YES];    // 1.控制当前行的数据是否需要选中    Shop *s = _shops[indexPath.row];// 如果之前是选中,现在再点击,即认识是:取消选中    if ([_deleteShops containsObject:s]) {         [_deleteShops removeObject:s];    } else {         // 反之之前从未选中过,这此点击是选中,即要删除该条row        [_deleteShops addObject:s];    }    // 2.局部刷新表格,刷新指定IndexPaths    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];// 3.显示标题    if (_deleteShops.count == 0) {        _titleLabel.text = @"淘宝";        _removeItem.enabled = NO;    } else {        _removeItem.enabled = YES;        _titleLabel.text = [NSString stringWithFormat:@"淘宝(%d)", _deleteShops.count];    }//    for (Shop *shop in _deleteShops) {//        NSLog(@"%@", shop.name);//    }//    [tableView reloadData];    // 1.取出indexPath这行对应的cell//    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];//    selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;}#pragma mark 取消选中了某一行就会调用//- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath//{//}@end

H:/IOS_UI/day7-01-UITableView-性能优化的应用-Shop.h
////  Shop.h//  01-UITableView01-性能优化的应用////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <Foundation/Foundation.h>@interface Shop : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, copy) NSString *icon;@property (nonatomic, copy) NSString *desc;- (id)initWithDict:(NSDictionary *)dict;+ (id)shopWithDict:(NSDictionary *)dict;@end

H:/IOS_UI/day7-01-UITableView-性能优化的应用-Shop.m
////  Shop.m//  01-UITableView01-性能优化的应用////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import "Shop.h"@implementation Shop- (id)initWithDict:(NSDictionary *)dict{    if (self = [super init]) {        // 将字典中的键值对转成模型属性        self.name = dict[@"name"];        self.icon = dict[@"icon"];        self.desc = dict[@"desc"];    }    return self;}+ (id)shopWithDict:(NSDictionary *)dict{//    Shop *s = [[Shop alloc] init];//    s.name = dict[@"name"];//    s.icon = dict[@"icon"];//    s.desc = dict[@"desc"];    return [[self alloc] initWithDict:dict];}@end

H:/IOS_UI/day7-01-UITableView-性能优化的应用-shops.plist
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array><dict><key>desc</key><string>休闲零食,酒水饮料,进口食品,地方特产</string><key>icon</key><string>food.jpg</string><key>name</key><string>美食</string></dict><dict><key>desc</key><string>模型玩具,积木拼插,娃娃玩具,电动玩具</string><key>icon</key><string>toy.jpg</string><key>name</key><string>玩具</string></dict><dict><key>desc</key><string>清洁剂,纸制品,清洁用具,一次性用品</string><key>icon</key><string>home.jpg</string><key>name</key><string>家居</string></dict><dict><key>desc</key><string>电脑整机,打印机,数码影音,数码影像</string><key>icon</key><string>mechine.jpg</string><key>name</key><string>生活电器</string></dict><dict><key>desc</key><string>小说,文艺,教育,科技,杂志,社科</string><key>icon</key><string>book.jpg</string><key>name</key><string>音像图书</string></dict><dict><key>desc</key><string>女包,男包,旅行箱包,钱包卡套,儿童箱包,腰包</string><key>icon</key><string>bag.jpg</string><key>name</key><string>箱包</string></dict><dict><key>desc</key><string>精品女装,品质男装,童装童鞋,运动户外,鞋靴</string><key>icon</key><string>clothe.jpg</string><key>name</key><string>服装</string></dict><dict><key>desc</key><string>手机充值,鲜花速递,旅游服务,教育培训,摄像服务</string><key>icon</key><string>life.jpg</string><key>name</key><string>生活服务</string></dict><dict><key>desc</key><string>哺育喂养,洗护清洁,孕妈专区,婴幼家纺,宝宝服饰</string><key>icon</key><string>baby.jpg</string><key>name</key><string>母婴用品</string></dict><dict><key>desc</key><string>女性护理,口腔护理,沐浴用品,男士护理,魅力香氛,美容工具,精油芳疗</string><key>icon</key><string>buty.jpg</string><key>name</key><string>美容化妆</string></dict><dict><key>desc</key><string>手表,钻石,翡翠玉石,黄金/k金/铂金,贵重宝石,天然珍珠</string><key>icon</key><string>decoration.jpg</string><key>name</key><string>珠宝饰品</string></dict><dict><key>desc</key><string>衣物清洁护理,家庭清洁护理,纸制品,一次性用品,清洁用具,厨具锅具,餐具水具</string><key>icon</key><string>clean.jpg</string><key>name</key><string>厨卫清洁</string></dict><dict><key>desc</key><string>手机通讯,运营商,手机配件,数码影像,时尚影音,数码配件</string><key>icon</key><string>phone.jpg</string><key>name</key><string>手机数码</string></dict><dict><key>desc</key><string>炒锅,汤锅,平底锅,套装锅,蒸锅,奶锅,煲,压力锅</string><key>icon</key><string>knife.jpg</string><key>name</key><string>锅具餐具</string></dict><dict><key>desc</key><string>宠物日用品,宠物医护美容,出行装备,宠物玩具,水族宠物</string><key>icon</key><string>pet.jpg</string><key>name</key><string>宠物园艺</string></dict></array></plist>

H:/IOS_UI/day7-02-UITableView-性能优化的应用-MJViewController.h
////  MJViewController.h//  01-UITableView01-性能优化的应用////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <UIKit/UIKit.h>@interface MJViewController : UIViewController@property (weak, nonatomic) IBOutlet UILabel *titleLabel;@property (weak, nonatomic) IBOutlet UITableView *tableView;@property (weak, nonatomic) IBOutlet UIBarButtonItem *removeItem;- (IBAction)remove;@end

H:/IOS_UI/day7-02-UITableView-性能优化的应用-MJViewController.m
//  MJViewController.m//  01-UITableView01-性能优化的应用//  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.#import "MJViewController.h"#import "Shop.h"@interface MJViewController ()  <UITableViewDataSource, UITableViewDelegate>{    NSMutableArray *_shops;    NSMutableArray *_deleteShops; // 存放即将要删除的模型数据}@end@implementation MJViewController- (void)viewDidLoad{    [super viewDidLoad];    // 1.加载plist,array中装的都是NSDictionary对象    NSString *path = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];//全路径    NSArray *array = [NSArray arrayWithContentsOfFile:path];    _shops = [NSMutableArray array];_deleteShops = [NSMutableArray array];// 2.将array中的字典元素填充到Shop模型对象,并将Shop模型对象添加到可变数组    for (NSDictionary *dict in array) {        // 2.1.创建模型//        Shop *s = [[Shop alloc] initWithDict:dict];        Shop *s = [Shop shopWithDict:dict];        // 2.2.将模型对象放进数组中        [_shops addObject:s];    }}#pragma mark 删除数据- (void)remove{    // 0.获得所有要被删除的数据的行号集合    NSMutableArray *deletePaths = [NSMutableArray array];//遍历,欲被删除的对象数组    for (Shop *s in _deleteShops) {//找出欲被删除的对象数组中的元素,在主数组中的索引,即为界面上的行号        int row = [_shops indexOfObject:s];//根据行号,创建NSIndexPath对象        NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];//添加NSIndexPath对象到要被删除的NSIndexPath数组中        [deletePaths addObject:path];    }    // 1.首先,从主模型数组中的删除要删除的数据(将_deleteShops中的所有对象元素从_shops中删除)    [_shops removeObjectsInArray:_deleteShops];    // 2.然后清空垃圾筒,即数组_deleteShops(清空已经删除的数据)    [_deleteShops removeAllObjects];    // 3.最后调用tableView的deleteRowsAtIndexPaths方法删除特定的这些rows    [self.tableView deleteRowsAtIndexPaths:deletePaths withRowAnimation:UITableViewRowAnimationTop];}#pragma mark - 数据源方法#pragma mark 每次都会调用,返回共多少行数据- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    if (_deleteShops.count == 0) {        _titleLabel.text = @"淘宝";        _removeItem.enabled = NO;    } else {        _removeItem.enabled = YES;        _titleLabel.text = [NSString stringWithFormat:@"淘宝(%d)", _deleteShops.count];    }    return _shops.count;}#pragma mark 只要有一行要进入视线范围,就被调用,每一行显示怎样的cell(内容)- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    // 1.定义一个可重用标识    static NSString *ID = @"cell";    // 2.去缓存池中取出可循环利用的cell    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];    // 3.如果缓存中没有可循环利用的cell,创建新cell,并记得指定标识    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];    }    // 4.设置每个cell独一无二的商品数据    // 4.0.取出indexPath这行对应的商品shop模型对象    Shop *s = _shops[indexPath.row];    // 4.1.独一无二的商品名称    cell.textLabel.text = s.name;    // 4.2.独一无二的商品描述    cell.detailTextLabel.text = s.desc;    // 4.3.独一无二的商品图片    cell.imageView.image = [UIImage imageNamed:s.icon];    // 4.4.显示cell之前,先检测是否需要进行打钩    // 如果_deleteShops数组中包含了s这个数据对象    if ([_deleteShops containsObject:s]) { // 出产前,需要打钩        cell.accessoryType = UITableViewCellAccessoryCheckmark;    } else { // 不需要打钩        cell.accessoryType = UITableViewCellAccessoryNone;    }    return cell;}#pragma mark - 代理方法#pragma mark 每一行的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return 70;}#pragma mark 监听cell的点击#pragma mark 选中了某一行就会调用- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    // 0.动画取消当前选中行的高亮背景蓝色(去掉cell默认的蓝色背景)    [tableView deselectRowAtIndexPath:indexPath animated:YES];    // 1.从主数组中取出当前点击行号对应的数据对象    Shop *s = _shops[indexPath.row];// 如果删除数组,包含了该数据对象,说明,之前是选中过,现在取消选中    if ([_deleteShops containsObject:s]) {         // 从删除列表中移除        [_deleteShops removeObject:s];    } else { // 之前是没有选中过,现在选中        // 添加删除列表中        [_deleteShops addObject:s];    }    // 2.局部刷新表格,也可以[tableView reloadData]    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];}@end

H:/IOS_UI/day7-02-UITableView-性能优化的应用-Shop.h
////  Shop.h//  01-UITableView01-性能优化的应用////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <Foundation/Foundation.h>@interface Shop : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, copy) NSString *icon;@property (nonatomic, copy) NSString *desc;- (id)initWithDict:(NSDictionary *)dict;+ (id)shopWithDict:(NSDictionary *)dict;@end

H:/IOS_UI/day7-02-UITableView-性能优化的应用-Shop.m
////  Shop.m//  01-UITableView01-性能优化的应用////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import "Shop.h"@implementation Shop- (id)initWithDict:(NSDictionary *)dict{    if (self = [super init]) {        // 将字典中的键值对转成模型属性        self.name = dict[@"name"];        self.icon = dict[@"icon"];        self.desc = dict[@"desc"];    }    return self;}+ (id)shopWithDict:(NSDictionary *)dict{//    Shop *s = [[Shop alloc] init];//    s.name = dict[@"name"];//    s.icon = dict[@"icon"];//    s.desc = dict[@"desc"];    return [[self alloc] initWithDict:dict];}@end

H:/IOS_UI/day7-02-UITableView-性能优化的应用-shops.plist
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array><dict><key>desc</key><string>休闲零食,酒水饮料,进口食品,地方特产</string><key>icon</key><string>food.jpg</string><key>name</key><string>美食</string></dict><dict><key>desc</key><string>模型玩具,积木拼插,娃娃玩具,电动玩具</string><key>icon</key><string>toy.jpg</string><key>name</key><string>玩具</string></dict><dict><key>desc</key><string>清洁剂,纸制品,清洁用具,一次性用品</string><key>icon</key><string>home.jpg</string><key>name</key><string>家居</string></dict><dict><key>desc</key><string>电脑整机,打印机,数码影音,数码影像</string><key>icon</key><string>mechine.jpg</string><key>name</key><string>生活电器</string></dict><dict><key>desc</key><string>小说,文艺,教育,科技,杂志,社科</string><key>icon</key><string>book.jpg</string><key>name</key><string>音像图书</string></dict><dict><key>desc</key><string>女包,男包,旅行箱包,钱包卡套,儿童箱包,腰包</string><key>icon</key><string>bag.jpg</string><key>name</key><string>箱包</string></dict><dict><key>desc</key><string>精品女装,品质男装,童装童鞋,运动户外,鞋靴</string><key>icon</key><string>clothe.jpg</string><key>name</key><string>服装</string></dict><dict><key>desc</key><string>手机充值,鲜花速递,旅游服务,教育培训,摄像服务</string><key>icon</key><string>life.jpg</string><key>name</key><string>生活服务</string></dict><dict><key>desc</key><string>哺育喂养,洗护清洁,孕妈专区,婴幼家纺,宝宝服饰</string><key>icon</key><string>baby.jpg</string><key>name</key><string>母婴用品</string></dict><dict><key>desc</key><string>女性护理,口腔护理,沐浴用品,男士护理,魅力香氛,美容工具,精油芳疗</string><key>icon</key><string>buty.jpg</string><key>name</key><string>美容化妆</string></dict><dict><key>desc</key><string>手表,钻石,翡翠玉石,黄金/k金/铂金,贵重宝石,天然珍珠</string><key>icon</key><string>decoration.jpg</string><key>name</key><string>珠宝饰品</string></dict><dict><key>desc</key><string>衣物清洁护理,家庭清洁护理,纸制品,一次性用品,清洁用具,厨具锅具,餐具水具</string><key>icon</key><string>clean.jpg</string><key>name</key><string>厨卫清洁</string></dict><dict><key>desc</key><string>手机通讯,运营商,手机配件,数码影像,时尚影音,数码配件</string><key>icon</key><string>phone.jpg</string><key>name</key><string>手机数码</string></dict><dict><key>desc</key><string>炒锅,汤锅,平底锅,套装锅,蒸锅,奶锅,煲,压力锅</string><key>icon</key><string>knife.jpg</string><key>name</key><string>锅具餐具</string></dict><dict><key>desc</key><string>宠物日用品,宠物医护美容,出行装备,宠物玩具,水族宠物</string><key>icon</key><string>pet.jpg</string><key>name</key><string>宠物园艺</string></dict></array></plist>

H:/IOS_UI/day7-03-UITableView-删除数据-MJViewController.h
////  MJViewController.h//  02-UITableView02-删除数据////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <UIKit/UIKit.h>@interface MJViewController : UIViewController- (IBAction)remove:(id)sender;@property (weak, nonatomic) IBOutlet UITableView *tableView;@end

H:/IOS_UI/day7-03-UITableView-删除数据-MJViewController.m
////  MJViewController.m//  02-UITableView02-删除数据////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import "MJViewController.h"#import "Person.h"@interface MJViewController () <UITableViewDataSource, UITableViewDelegate>{    NSMutableArray *_persons;}@end@implementation MJViewController- (void)viewDidLoad{    [super viewDidLoad];        _persons = [NSMutableArray array];    for (int i = 0; i<30; i++) {        Person *p = [[Person alloc] init];        p.name = [NSString stringWithFormat:@"Person---%d", i];        p.phone = [NSString stringWithFormat:@"%d", 10000 + arc4random_uniform(10000000)];\        [_persons addObject:p];    }}#pragma mark - 数据源方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return _persons.count;}#pragma mark 每一行显示怎样的cell(内容)- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    // 1.定义一个标识    static NSString *ID = @"cell";        // 2.去缓存池中取出可循环利用的cell    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];        // 3.如果缓存中没有可循环利用的cell    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];    }        // 4.设置数据    // 4.1.取出模型    Person *p = _persons[indexPath.row];        // 4.2.姓名    cell.textLabel.text = p.name;        // 4.3.手机    cell.detailTextLabel.text = p.phone;        return cell;}#pragma mark - 代理方法#pragma mark 当用户提交了一个编辑操作就会调用(比如点击了“删除”按钮)// 只要实现了这个方法,就会默认添加滑动删除功能- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{    // 如果不是删除操作,直接返回    if (editingStyle != UITableViewCellEditingStyleDelete) return;        // 1.删除模型数据    [_persons removeObjectAtIndex:indexPath.row];        // 2.刷新表格//    [tableView reloadData];    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];}#pragma mark 当移动了某一行cell就会调用// 只要实现了这个方法,就会默认添加排序功能- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{//    NSLog(@"%d --- %d", sourceIndexPath.row, destinationIndexPath.row);    //    [_persons exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];        // 1.取出要拖动的模型数据    Person *p = _persons[sourceIndexPath.row];        // 2.删除之前行的数据    [_persons removeObject:p];        // 3.插入数据到新的位置    [_persons insertObject:p atIndex:destinationIndexPath.row];}#pragma mark 删除- (IBAction)remove:(id)sender {    // 1.进入编辑模式//    self.tableView.editing = YES;    BOOL result = !self.tableView.isEditing;    [self.tableView setEditing:result animated:YES];}@end

H:/IOS_UI/day7-03-UITableView-删除数据-Person.h
////  Person.h//  02-UITableView02-删除数据////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic, copy) NSString *name; // 姓名@property (nonatomic, copy) NSString *phone; // 电话@end

H:/IOS_UI/day7-03-UITableView-删除数据-Person.m
////  Person.m//  02-UITableView02-删除数据////  Created by apple on 13-11-30.//  Copyright (c) 2013年 itcast. All rights reserved.//#import "Person.h"@implementation Person@end

0 0
原创粉丝点击