Latest 1.4.2
Homepage https://github.com/sx1989827/LazyTableView
License MIT
Platforms ios 7.0, requires ARC
Dependencies MJRefresh, AFNetworking, JSONModel
Authors

一个可以最大程度简化uitableview操作的第三方框架

UITableView可谓是ios开发里的重中之重了,熟练掌握tableview的程度很大意义上决定着你对ui界面的熟悉程度,不过当逻辑复杂的时候,操作uitableview还是一件挺麻烦的事情,所以本框架旨在可以最大程度的减轻uitableview的繁琐,让程序员们可以更多的去考虑逻辑问题,而不是界面的调整。

它可以做什么

1.自动加载远程url的json数据,对于section的解析也不在话下,让用户用更少的代码获得更高的效率。

2.手工创建本地的静态cell,可以自由的控制section和cell的一切。

3.自定义的hud动画可以在加载数据的时候毫无违和感。

为什么要使用它

1.简单方便,将大量繁琐的操作封装起来,用户只需几行代码即可获得一个远程数据抓取的tableview。

2.使用delegate模式,这样可以将cell,viewcontroller和data分离开来,一个cell绑定一个dataitem,使用orm将远程的json数据转化为本地的对象。

3.本地静态cell可以使用block创建,并且设置点击事件。

4.可以绑定多个cell和data,根据data数据源里数据的不同在不同的cell之间自由切换,满足复杂的列表需求。

5.支持xib和纯代码两种cell创建方式,框架自动识别创建。

耦合性

1.我使用了AFNetwoking,MJRefresh,JsonModal三个框架来简化代码的编写,如果用户没有使用cocoapods,无需做任何改动,将LazyTableView文件夹拖入项目即可。

2.如果用户使用了cocoapods,则在podfile里加入以下代码:pod "LazyTableView"即可。

如何使用

1.远程url抓取:

拖入一个uitableview,将custom class改为LazyTableView,连接控件变量为table1,在.h文件里引入LazyTableViewDelegate协议,然后在viewcontroller里写入如下代码:

[_table1 registarCell:@"InfoCell" StrItem:@"InfoItem"];
[_table1 setDelegateAndDataSource:self];
//[_table1 setPageParam:@"pi" Page:2];
[_table1 disablePage];
[_table1 reloadRequest:@"http://v5.pc.duomi.com/search-ajaxsearch-searchall" Param:@{
                                 @"kw":@"爱情",
                                 @"pz":@10
                                    }];

-(NSArray*)LazyTableViewDidFinishRequest:(LazyTableView *)tableview Request:(NSDictionary *)dic
  {
    if(tableview==_table1)
    {
       return dic[@"albums"];
    }
    return nil;
  }

建立InfoCell类,继承LazyTableCell,将InfoCell的重用id设置为InfoCell,写入如下代码:

-(NSNumber*)LazyTableCellHeight:(id)item Path:(NSIndexPath *)path
{
 return  @80;
}

-(void)LazyTableCellForRowAtIndexPath:(id)item Path:(NSIndexPath *)path
{
     InfoItem *data=item;
    _lbName.text=data.name;
     _lbType.text=data.type;
    _lbDate.text=data.release_date;
}

建立InfoItem类,继承自LazyTableBaseItem,在h文件里写入属性(这里的名称要与json数据里字段的名称一致,具体可参考jsonmodal的用法):

@property (strong,nonatomic) NSString *name;
@property (strong,nonatomic) NSString *release_date;
@property (strong,nonatomic) NSString *type;

2.本地自定义静态cell创建,建立tableview过程如上所示,不用建立LazyTableBaseItem的子类,在viewcontroller里写入如下代码:

 [_table2 setDelegateAndDataSource:self];
    [_table2 registarCell:@"InfoCell" StrItem:nil];
    [_table2 addStaticCell:80 CellBlock:^(id cell) {
        InfoCell *cl=cell;
        [email protected]"dsf";
        [email protected]"dfwwfew";
    } ClickBlock:^(id cell) {
        NSLog(@"123");
    }];
    LazyTableBaseSection *sec=[[LazyTableBaseSection alloc] init];
    sec.headerHeight=100;
    [email protected]"sxsx";
    [_table2 addSection:sec];
    [_table2 addStaticCell:80 CellBlock:^(id cell) {
        InfoCell *cl=cell;
        [email protected]"123";
        [email protected]"dsfsd234";
    } ClickBlock:^(id cell) {
        NSLog(@"zzz");
    }];
    [_table2 reloadStatic];

3.本地带section的静态数据源的cell创建,其他参考上面,在viewcontroller里写入如下代码:

[_table3 setDelegateAndDataSource:self];
    [_table3 registarCell:@"myTableViewCell" StrItem:@"myTableViewItem"];
    NSArray* [email protected][
          @{@"we":@"121312",@"data":@[
                    @{
                        @"scoreRealName":@"水电费水电费的"
                        },
                    @{
                        @"scoreRealName":@"水sad电费水电费的"
                        },
                    @{
                        @"scoreRealName":@"asdas水电费水电费的"
                        }
                    ]},
          @{@"we":@"121dasas312",@"data":@[
                    @{
                        @"scoreRealName":@"水电费的"
                        },
                    @{
                        @"scoreRealName":@"水s费水电费的"
                        },
                    @{
                        @"scoreRealName":@"asdas水"
                        }
                    ]},
          @{@"we":@"123s312",@"data":@[
                    @{
                        @"scoreRealName":@"水3443电费的"
                        },
                    @{
                        @"scoreRealName":@"水s费esrse水电费的"
                        },
                    @{
                        @"scoreRealName":@"asdas水3423"
                        }
                    ]},
          @{@"we":@"12",@"data":@[
                    @{
                        @"scoreRealName":@"水gfhf电费的"
                        },
                    @{
                        @"scoreRealName":@"水s费水电hrt费的"
                        },
                    @{
                        @"scoreRealName":@"asdas水7867j"
                        }
                    ]}
          ];
    NSArray *[email protected][
                    @"a",
                    @"b",
                    @"c",
                    @"d"
                    ];
    [_table3 addDataSource:arr];
    [_table3 setSectionIndexTitles:arr1];
    [_table3 reloadStatic];

-(LazyTableBaseSection*)LazyTableViewInfoForSection:(LazyTableView *)tableview Request:(NSDictionary *)dic
{
    if(tableview==_table3)
    {
        LazyTableBaseSection *sec=[[LazyTableBaseSection alloc] init];
        sec.titleHeader=dic[@"we"];
        sec.headerHeight=50;
        [email protected]"data";
        return sec;
    }
    return nil;
}

4.抓取远程url数据的带section的cell,具体过程如3所示,不同的是需要在LazyTableViewDidFinishRequest里返回section信息所标示的字段名称,且tableview的初始化参考1的初始化方式。

5.本地自定义静态cell的创建(不用block),文件的建立如1所示,在viewcontroller里写入如下代码:

[_tableMain setDelegateAndDataSource:self];
[_tableMain registarCell:@"MemberOptionCell" StrItem:@"MemberOptionItem"];
CustomTableBaseSection *sec=[[CustomTableBaseSection alloc] init];
MemberOptionItem *item=[[MemberOptionItem alloc] init];
[email protected]"缴纳保证金";
[email protected]"finance";
[sec addRow:item];
item=[[MemberOptionItem alloc] init];
[email protected]"消息";
[email protected]"message";
[sec addRow:item];
item=[[MemberOptionItem alloc] init];
[email protected]"公告";
[email protected]"notice";
[sec addRow:item];
item=[[MemberOptionItem alloc] init];
[email protected]"系统设置";
[email protected]"about";
[sec addRow:item];
[_tableMain addSection:sec];
[_tableMain reloadStatic];

6.多个cell之间的切换。调用registarCell即可,需要实现LazyTableViewSwitchCell方法

[_table1 registarCell:@"InfoCell" StrItem:@"InfoItem"];
[_table1 registarCell:@"InfoCell1" StrItem:@"InfoItem"];
[_table1 setDelegateAndDataSource:self];
[_table1 setPageParam:@"pi" Page:2];

//[_table1 disablePage];
[_table1 reloadRequest:@"http://v5.pc.duomi.com/search-ajaxsearch-searchall" Param:@{
                                 @"kw":@"爱情",
                                 @"pz":@10
                                    }];

-(NSArray*)LazyTableViewDidFinishRequest:(LazyTableView *)tableview Request:(NSDictionary *)dic
{
    if(tableview==_table1)
    {
        return dic[@"albums"];
    }
    return nil;
}

-(NSString*)LazyTableViewSwitchCell:(LazyTableView *)tableview Request:(NSDictionary *)item Section:(NSInteger)section       Row:(NSInteger)row
{
  if(tableview==_table1)
  {
     if([item[@"type"] isEqualToString:@"专辑"])
     {
          return @"InfoCell1";
     }
     else
    {
         return @"InfoCell";
    }
  }
   return nil;
}

综述

大致的用法就如上面所述,大家可以下载demo测试下,代码里都有详细的注释,这个框架我会不断完善,自己的app也在使用,希望大家有什么意见和想法可以与我多多交流。

联系方式

QQ群:1群:460483960(目前已满) 2群:239309957 这是我们的ios项目的开发者qq群,这是一个纯粹的ios开发者社区,里面汇聚了众多有经验的ios开发者,没有hr和打扰和广告的骚扰,为您创造一个纯净的技术交流环境,如果您对我的项目以及对ios开发有任何疑问,都可以加群交流,欢迎您的加入~

微信公众号:fuckingxcode 欢迎大家关注,我们群的活动投票和文章等都会在公众号里,群期刊目前也移到公众号里。

Latest podspec

{
    "name": "LazyTableView",
    "version": "1.4.2",
    "summary": "LazyTableView can be the greatest degree of simplification of the operation of UITableView, support for remote JSON loading.",
    "description": "1.Automatically load a remote URL of the JSON data, the analysis    nof section also mention, allowing users to obtain higher   nefficiency with less code.n2. manually create the local static cell, you can freely control   nthe section and cell.n3. custom HUD animation when there is no sense of violation and  nloading data.nLazyTableView can be the greatest degree of simplification of the  noperation of UITableView, support for remote JSON loading",
    "homepage": "https://github.com/sx1989827/LazyTableView",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "sx1989827": ""
    },
    "platforms": {
        "ios": "7.0"
    },
    "source": {
        "git": "https://github.com/sx1989827/LazyTableView.git",
        "tag": "1.4.2"
    },
    "source_files": "LazyTableView/LazyTableView/*.{h,m}",
    "resources": "LazyTableView/LazyTableView/img/*.png",
    "requires_arc": true,
    "dependencies": {
        "MJRefresh": [],
        "AFNetworking": [
            "2.6.3"
        ],
        "JSONModel": []
    }
}

Pin It on Pinterest

Share This