文档章节

iOS UITableView相关

用户ens8lz4vu0
 用户ens8lz4vu0
发布于 2016/01/20 23:20
字数 661
阅读 88
收藏 0

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<UITableViewRowAction *> *)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<UITableViewRowAction *> *)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. 

 

 

© 著作权归作者所有

上一篇: iOS UITextField相关
下一篇: iOS Record
用户ens8lz4vu0
粉丝 0
博文 9
码字总数 3533
作品 0
深圳
私信 提问
iOS开发tips-UITableView、UICollectionView行高/尺寸自适应

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/55002487 UITableView 我们都知道UITableView从iOS 8开始实现行高的自适应相对比...

KenshinCui
2017/02/12
0
0
iOS开发tips-神奇的UITableView

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/71436920 概述 UITableView是iOS开发中使用频率最高的UI控件,在前面的文章中对于...

KenshinCui
2017/05/08
0
0
iOS开发小技巧:刷新UITableView

在很多APP界面都用到的UITableView,对iOS开发者来说一定不陌生吧。网上关于UITableView的文章早已多不胜数,尤其是关于UITableView优化方面的,对开发者来说非常值得一看。 现在就来看看,刷...

flyurt
2015/10/23
1K
0
iOS之UITableView重新排序

表格视图在ios 开发中,经常使用到的视图,几乎每个app 中多多少少都会有UITableView的影子,就是因为UITableView的功能非常强大,使用起来也非常简单,苹果公司也对接口做了很好的封装,才使...

广州英趣科技
2013/06/05
0
2
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C 语言 二级指针的使用

#include <stdio.h>#include <stdlib.h>typedef struct node Node;struct node {int data;struct node* next;struct node* prev;};Node head;Node* insert(Node......

小张525
45分钟前
2
0
【大数据技术】——Hadoop(1)

什么是大数据 基本概念 《数据处理》 在互联网技术发展到现今阶段,大量日常、工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前的传统的数据处理技术已经...

须臾之余
59分钟前
8
0
比特币从地址逆向计算私钥

区块链 区块链简介 说到比特币,就不得不提区块链。那什么是区块链呢? 区块链本质是一个数据集,只不过数据的组织采用了比较特殊的方式,就是把数据拆分为一块一块的小数据集。 为什么要进行...

trayvon
今天
1
0
TypeScript……真香

写前端或者用 node 写命令行小工具一直采用的 es6 的语法,对于 TypeScript 则是秉持敬而远之的态度,毕竟团队中多推广一门语言所需要花费的精力都是让人望而却步的。所以对于 JavaScript 的...

郁也风
今天
3
0
shell基本案例

1、自定义rm linux系统的rm命令太危险,一不小心就会删除掉系统文件。 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做...

寰宇01
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部