美文网首页
iOS 列表页面多cell展示、刷新、加载、展现空视图逻辑处理

iOS 列表页面多cell展示、刷新、加载、展现空视图逻辑处理

作者: Rathen | 来源:发表于2018-06-13 11:53 被阅读73次

工作中,总会遇到各种的列表页面,大家基本上都是使用UITableView来完成,最基本的功能有:上拉加载、下拉刷新、多个Cell展示、空视图展示、网络错误视图展示。
如果一个项目中有20个列表页,那么是在每一个列表页面中都写入这些功能代码和逻辑吗????
开发中,为了节省列表页面的开发时间,把这些功能代码和业务逻辑全部写在了一个BaseTbaleViewController中,这样能够做到,只需要给我传入一个模型数组,就可以直接实现整个列表页面。

controller中的处理

image.png

首先声明一个controller继承于BTZBaseTbaleViewController

在BTZTestTableViewController中


image.png
网络请求,需要传入url和参数

在controller重写getTableRequestUrl和getTableRequestParamer,并传入相应的参数

- (NSString *)getTableRequestUrl {
    return @"这里填写网络请求的URL";
}

- (NSDictionary *)getTableRequestParamer {
    //这里填写参数
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    [dict setValue:@(self.currentPage) forKey:@"currentPage"];
    [dict setValue:@(self.pageSize) forKey:@"pageSize"];
    [dict setValue:@2 forKey:@"type"];
    return dict;
}

- (void)loadNewData {
    //1.loading
    //2.调用这个方法
    [self loadNewDataWithRequest:^(NSString *url, NSDictionary *parameters) {
        __weak typeof(self) weakSelf = self;
        //这里使用网络请求
//        [HSHTTPClient request:POST URLString:url parameters:parameters success:^(id json) {
//            NSString *code = json[@"code"];
//            NSString *msg = json[@"msg"];
//            NSDictionary *result = json[@"result"];
//            if (code.intValue == 100000) {
//                NSArray *array = [result objectForKey:@"data"];
//                if (array.count > 0) {
//                    NSArray *dataArray = [BTZTestItem mj_objectArrayWithKeyValuesArray:[result objectForKey:@"data"]];
//                    [weakSelf serviceWithResult:dataArray operation:nil];
//                }
//
//            }else {
//
//            }
//
//
//        } failure:^(NSError *error) {
//            [self serviceFailedWithError:error operation:nil];
//        }];
        NSMutableArray *array = [[NSMutableArray alloc] init];
        for (int i = 0; i< 10; i ++) {
            BTZTestItem *item = [[BTZTestItem alloc] init];
            if (i % 2 == 0) {
                item.type = 1;
            } else {
                item.type = 2;
            }
            
            [array addObject:item];
        }
        [weakSelf serviceWithResult:array operation:nil];
    
    }];
    
        
    
}

模型数据处理

image.png

模型也要继承于BTZBaseItem

如果是单个Cell的页面

单个cell页面,只需要在item中的init方法中传入 cellName、isXibCell、cellHeight

- (instancetype)init
{
    self = [super init];
    if (self) {
        self.cellName = @"传入cell的类名";
        self.cellHeight = 100;//cell高度
        self.isXibCell = NO;//是否是XIB
    }
    return self;
}
如果是多个cell的页面

多个cell的页面,可以设定一个type值来进行赋值

- (void)setType:(int)type {
    switch (type) {
        case 1:
            {
                self.titleStr = @"这是XIB";
                self.cellName = @"BTZTestXibTableViewCell";
                self.cellHeight = 50;
                self.isXibCell = YES;
            }
            break;
        case 2:
        {
            self.titleStr = @"这是纯代码";
            self.cellName = @"BTZTestTableViewCell";
            self.cellHeight = 60;
            self.isXibCell = NO;
        }
            break;
            
        default:
            break;
    }
}

cell处理

image.png

cell继承于BTZBaseTableViewCell
使用XIB的cell只需要实现updateCell方法,在里面赋值

- (void)updateCell:(BTZTestItem *)item {
    self.titleLabel.text = item.titleStr;
}

纯代码cell实现

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        [self creatView];
        self.backgroundColor = [UIColor redColor];
    }
    return self;
}
- (void)creatView {
    
    self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
    [self.contentView addSubview:self.titleLabel];
    
}
- (void)updateCell:(BTZTestItem *)item {
    self.titleLabel.text = item.titleStr;
}

完成后,网络请求、下拉刷新、上拉加载、空视图、网络错误视图这些业务逻辑就不用再处理了

git地址:https://github.com/ZhaoRS/BTZBaseTableViewController

相关文章

网友评论

      本文标题:iOS 列表页面多cell展示、刷新、加载、展现空视图逻辑处理

      本文链接:https://www.haomeiwen.com/subject/zfadeftx.html