AOZTableViewProvider 0.7.4

AOZTableViewProvider 0.7.4

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2018 年 9 月

Aozorany 维护。



  • 作者:
  • Aozorany

AOZTableViewProvider

AOZTableViewProvider 允许您使用自己的配置文件构建 UITableView,无需编写任何 dataSource 和 delegate。

中文文档请访问 README_CN.md。

要求

  • Xcode 7.0 或更高版本
  • iOS 5.0 或更高版本
  • 如果您的项目使用 MRC,请添加 -fobjc-arc 目标

安装

  • 下载此项目
  • 将以下文件添加到您的项目中
    • AOZTableViewCell
    • AOZTableViewConfigFileParser
    • AOZTableViewDefaultConfigFileParser
    • AOZTableViewDefaultConfigFileParserAddons
    • AOZTableViewProvider
    • AOZTableViewProviderUtils

安装完成。

##通过 CocoaPods 安装

现在 AOZTableViewProvider 在 CocoaPods 中可用,只需将以下行添加到您的 pod 文件中

pod 'AOZTableViewProvider', '~> 0.3'

快速入门

  • 编写您自己的配置文件,例如,如下所示

    row
    
  • 在你的viewController.m文件中,导入AOZTableViewProvider.h,并编写以下代码

    //_tableView: your own UITableView
    _tableViewProvider = [[AOZTableViewProvider alloc] init];
    _tableViewProvider.configBundleFileName = /*Your config file*/;
    _tableViewProvider.dataProvider = self;
    [_tableViewProvider connectToTableView:mainTableView];
    [_tableViewProvider parseConfigFile:NULL];
    //[_tableViewProvider setNeedsReloadForMode:0];//called when data source for mode 0 is updated.
    [_tableViewProvider reloadTableView];
    
  • 运行你的项目,你将看到只有一个行的_tableView。

关于配置文件

配置文件是带有.tableViewConfig扩展名的文本文件,并由多行组成。每一行可以以section,row或者mode开头。

表示一个单行,可以与-s, -c, -n和-all结合使用。

-s:数据源到行;

-c:行的单元格类;

-n:每行的元素数量,仅当-s为数组时可用;

-all:所有数组元素都在同一行中,仅当-s为数组时可用。

例如

//_array = @[@1, @2, @3, @4, @5]: I just write it here for convenience, this line doesn't belongs to the comfig file, you should write it in your code
row -s _array -c TableViewCell

表示数据源为_array且单元格类为TableViewCell的行,每行只有一个元素。

row -s _array -n 2 -c TableViewCell

表示数据源为_array且每行有两个元素的行。

row -s _array -all -c TableViewCell

表示数据源为_array 且所有元素都在同一行的行。

###关于TableViewCell

我们的配置文件中的TableViewCell是AOZTableViewCell的子类,或者是AOZTableViewCell的实现。

//TableViewCell.h
#import "AOZTableViewCell.h"

@interface TableViewCell : UITableViewCell <AOZTableViewCell>
@end
//TableViewCell.m
#import "TableViewCell.h"

@implementation TableViewCell

- (void)setContents:(id)contents {
    if ([contents isKindOfClass:[NSString class]]) {
        self.textLabel.text = (NSString *)contents;
    } else if ([contents isKindOfClass:[NSArray class]]) {
        NSMutableString *str = [NSMutableString string];
        for (NSString *subStr in ((NSArray *) contents)) {
            [str appendFormat:@"%@ ", subStr];
        }
        self.textLabel.text = str;
    } else if ([contents isKindOfClass:[NSDictionary class]]) {
        self.textLabel.text = contents[@"title"];
    }
}

+ (CGFloat)heightForCell:(id)contents {
    return 40;
}

@end

通常你应该重写setContentsheightForCell方法来告诉tableViewProvider如何确定高度,或者如何处理不同的内容。

在你的setContents:(id)contents方法中,根据你的配置文件中的不同-all-n参数,将发送不同的内容给你。

配置 内容
row -s _array -c TableViewCell 内容是你的数组中的元素
row -s _array -n 2 -c TableViewCell 内容是最大包含2个元素的NSArray
row -s _array -all -c TableViewCell 内容是包含_array中所有元素的NSArray
row -s _dictionary -c TableViewCell 内容是具有与_dictionary相同键和值的NSDictionary

表示一个单项,可以接受与行相同的参数。

例如

section -s _array -c TableViewCell

表示数据源为_array且每个节都有一个单元格类为TableViewCell的行的节。

section -c TableViewCell -h SectionHeaderView

表示具有SectionHeaderView作为头部视图的节,并且还包含一个单元格类为TableViewCell的行。

模式

在一次配置文件中,您可以编写多个不同的配置

mode
row -c TableViewCell
mode
row -c TableViewCell2

这意味着tableView有两种模式,您可以通过以下方式更改它们

_tableViewProvider.mode = 0;//or 1
[_tableViewProvider reloadDataAndTableView];

更复杂的行和分区

您可以在一个分区中写多个行,例如

section
row
row

这意味着一个分区和其中的两个行。

//_dictionary = @{@"first": @"1st value", @"second": @"2nd value"};
section -s _dictionary
row -s first
row -s second

如果dataSource参数在分区和行中都出现,则行中的-s表示“分区数据源中的数据源”。此配置表示一个包含两个行的分区,一个行的数据为“第1个值”,另一个行的数据为“第2个值”。

CellClass相当于单个行和行的元素数量参数以及(mPerRow)都可在分区和行中使用

section -c TableViewCell
row
row -c TableViewCell2

这意味着一个包含两个行的分区,一行的单元类为TableViewCell,另一个行的单元类为TableViewCell2。

当分区数据源是一个数组时,您可以在行中使用-es(元素源)参数

//_multipleArray = @[@{@"subs": @[@1, @2, @3]}, @{@"subs": @[@4, @5]}];
section -s _multipleArray
row -es subs

这意味着tableView有两个分区(你看到_multipleArray有两个元素),第一个分区有两个行,第二个分区有三个行。

注释

除mode、section和row以外的所有带有前缀的行都视为注释,因此您可以在任何想要的地方写它们。

参数快速查看

-s: 行或分区的数据源,它应该是TableViewProvider.dataProvider的成员变量。

-c: 行或分区的单元类,它应该是AOZTableViewCell的实现。

-h: 分区的头部视图类,它应该是AOZTableViewHeaderFooterView的实现。

-n: 每个分区或行中的元素数量。

-all: 如果数据源是数组,它表示所有元素都在同一行。

-es: 行的元素源,如果分区数据源是数组,则表示从中每个元素中搜索“查找值”。

-ec: 如果数据源为空(这意味着,如果源不是数组,则是nil;如果是数组,则nil或没有元素),则表示在此情况下使用的单元类。

-t: 另一个标签字符串。