博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS UITableView相关
阅读量:5962 次
发布时间:2019-06-19

本文共 7231 字,大约阅读时间需要 24 分钟。

  hot3.png

1. 初始化

#pragma mark - Getter- (UITableView *)myTableView {    if (!_myTableView) {        _myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];        _myTableView = [UITableView newAutoLayoutView];        _myTableView.delegate = self;        _myTableView.dataSource = self;                [self.view addSubview:_myTableView];    }        return _myTableView;}

2. 设置UITableView的行为

- (void)initRootView {    self.edgesForExtendedLayout = UIRectEdgeNone;    self.view.backgroundColor = kColor(0xeeeeee);    //去掉多余的分割线    self.myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;    self.myTableView.backgroundColor = kColor(0xeeeeee);    self.myTableView.tableFooterView = [UIView new];        //设置cell高度自适应 不用计算cell高度了    self.myTableView.rowHeight = UITableViewAutomaticDimension;    self.myTableView.estimatedRowHeight = 44;        //添加下拉刷新 上拉加载 用到 MJRefresh    [self addHeaderFooterView];}// 添加下拉刷新头部控件- (void)addHeaderFooterView {    __unsafe_unretained typeof(self) vc = self;    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{        [vc refreshRequest];    }];    header.lastUpdatedTimeLabel.hidden = YES;    header.stateLabel.textColor = kColor(0x888888);    self.myTableView.mj_header = header;    //自动刷新(一进入程序就下拉刷新)    [self.myTableView.mj_header beginRefreshing];        // 添加上拉刷新尾部控件    MJRefreshAutoStateFooter *footer = [MJRefreshAutoStateFooter footerWithRefreshingBlock:^{        [vc loadMoreRequest];    }];    footer.stateLabel.textColor = kColor(0x888888);    self.myTableView.mj_footer = footer;    self.myTableView.mj_footer.hidden = YES;}//继承vc 重写上下拉方法调用接口- (void)refreshRequest {}- (void)loadMoreRequest {}//某些页面不需要上下拉 重新new个UITableView 覆盖initRootView方法- (void)rootTableViewWithoutRefresh {    self.myTableView = [UITableView newAutoLayoutView];    self.myTableView.delegate = self;    self.myTableView.dataSource = self;    self.myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;    self.myTableView.backgroundColor = kColor(0xeeeeee);        self.myTableView.tableHeaderView = [UIView new];    self.myTableView.tableFooterView = [UIView new];    self.myTableView.rowHeight = UITableViewAutomaticDimension;    self.myTableView.estimatedRowHeight = 44;        [self.view addSubview:self.myTableView];}

3. 注册自定义cell

[self.myTableView registerClass:[AuctionNoticeCellAll class] forCellReuseIdentifier:@"AuctionNoticeCellAll"];

4. 复用cell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    AuctionNoticeCellAll *cell = [self.myTableView dequeueReusableCellWithIdentifier:@"AuctionNoticeCellAll" forIndexPath:indexPath];        //item是mode             [cell setupItem:item];    cell.selectionStyle = UITableViewCellSelectionStyleNone;    return cell;    }

5. 右滑删除cell

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {    return YES;}- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {    return UITableViewCellEditingStyleDelete;}//自定义删除view- (NSArray
 *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewRowAction *delAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {        //删除               [self.noticeAlarms removeObjectAtIndex:indexPath.section];            [self.myTableView beginUpdates];            [self.myTableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]                            withRowAnimation:UITableViewRowAnimationTop];            [self.myTableView endUpdates];    }];    delAction.backgroundColor = kColorRed;        return @[delAction];}/** *  删除显示的view */- (NSArray
 *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"normal" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {    //删除           [self.items removeObjectAtIndex:indexPath.section];        [self.myTableView beginUpdates];        [self.myTableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]                            withRowAnimation:UITableViewRowAnimationTop];        [self.myTableView endUpdates];    }];    UITableViewRowAction *action2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"default" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {        [self.myTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];    }];    UITableViewRowAction *action3 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"destructive" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {        [self.myTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];    }];        action1.backgroundColor = [UIColor lightGrayColor];    action2.backgroundColor = [UIColor greenColor];    action3.backgroundColor = [UIColor redColor];        action1.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];//    action2.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];//    action3.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];    if (indexPath.row%3 == 0) {        return @[action1, action2];    }        return @[action1, action2, action3];}

6. tip

//tableview 删除某行 先删除数据在调用deleteRowsAtIndexPaths:方法前,要确保数据为最新。也就是说,先将要删除的数据从数据源中删除    [self.rootItems removeObjectAtIndex:indexPath.row];    [self.myTableView beginUpdates];    [self.myTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexPath.row inSection:0]]  withRowAnimation:UITableViewRowAnimationAutomatic];    [self.myTableView endUpdates];删除section[self.noticeAlarms removeObjectAtIndex:indexPath.section];            [self.myTableView beginUpdates];            [self.myTableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationLeft];            [self.myTableView endUpdates];

7. 滚动时显示的cell由小变大动画

在tableView:cellForRowAtIndexPath:设置初始值 在willDisplayCell恢复[cell.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {        obj.transform = CGAffineTransformMakeScale(.8, .8);    }];/** *  cellForRowAtIndexPath初始化cell后准备显示cell调用. 不需要修改cell.transform */- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {    [UIView animateWithDuration:.5 animations:^{        [cell.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {            obj.transform = CGAffineTransformIdentity;        }];        NSLog(@"willDisplayCell %@", cell);    }];}

8.  

9. 

10. 

11. 

 

 

转载于:https://my.oschina.net/dkdsj/blog/607130

你可能感兴趣的文章
java反射机制与动态加载类
查看>>
第210天:node、nvm、npm和gulp的安装和使用详解
查看>>
hdu 1541 Stars poj 1195 Mobile phones(二维) poj 2155 Matrix(二维) hdu 3584 Cube(三维) 树状数组...
查看>>
js的一些写好的方法,方便以后调用。持续更新中,有更好的可以给我留言。。。...
查看>>
二叉树
查看>>
顺序容器的操作(续)
查看>>
【trie树】HDU4825 Xor Sum
查看>>
13个代码注释的小技巧
查看>>
Quartus 12的TimeQuest Timing Analyzer
查看>>
大牛——心声
查看>>
作用域和上下文
查看>>
模拟position:fixed效果
查看>>
洛谷 1071 潜伏者——模拟水题
查看>>
小组成员介绍
查看>>
通达信dynainfo说明
查看>>
信息系统管理师读书笔记之第2章 软件工程基础知识1部分
查看>>
五十一 常用第三方模块virtualenv
查看>>
Linux虚拟机安装步骤
查看>>
stm32之CAN发送、接收详解
查看>>
ceph优秀博文
查看>>