Skip to content

LYKit/LYDynamicSection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

LYDynamicSection

tableView 动态分区化


section动态化

当遇见较复杂页面时,一般会选择使用tableView去处理,如果页面层次结构复杂,tableView的使用也会变得繁琐。 tableView的分区最常用的做法是枚举化,使用枚举来标示分区的位置,会极大的简化分区的辨别。

但是,如果某一块甚至多块区域的分区数量未知,使用枚举来标示分区的位置就会变得困难,分区的使用也会变得麻烦和易错,因为需要对前面所有未知分区数量进行判断。




typedef NS_ENUM(NSUInteger, EnumDynamicSection) {
    EnumDynamicSection_1 = 0,
    EnumDynamicSection_2,   // 未知区域数量
    EnumDynamicSection_3,
    EnumDynamicSection_4,   // 未知区域数量
    EnumDynamicSection_5,
    EnumDynamicSection_6,   // 未知区域数量
};

使用LYDynamicSection可将section与枚举动态化,却仍然可以使用枚举来标识固定或者动态的分区,

_tableView.delegateDynamic = self;

// 配置动态分区的信息
- (NSMutableArray *)optionsOfDynamicSectionInTableView
{
    NSMutableArray *arrayEnum = [NSMutableArray array];
    // 动态分区 区域一
    LYTableViewDynamicSectionInfo *enumInfo1 = [[LYTableViewDynamicSectionInfo alloc] init];
    enumInfo1.indexOfEnum = EnumDynamicSection_2;
    enumInfo1.length = self.arrayDynamicSectionDataOne.count;
    [arrayEnum addObject:enumInfo1];
    // 动态分区 区域二
    LYTableViewDynamicSectionInfo *enumInfo2 = [[LYTableViewDynamicSectionInfo alloc] init];
    enumInfo2.indexOfEnum = EnumDynamicSection_4;
    enumInfo2.length = self.arrayDynamicSectionDataTwo.count;
    [arrayEnum addObject:enumInfo2];
    // 动态分区 区域三
    LYTableViewDynamicSectionInfo *enumInfo3 = [[LYTableViewDynamicSectionInfo alloc] init];
    enumInfo3.indexOfEnum = EnumDynamicSection_6;
    enumInfo3.length = self.arrayDynamicSectionDataThree.count;
    [arrayEnum addObject:enumInfo3];
    
    return arrayEnum;
}

// 使用 DynamicPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
dynamicPath:(LYTableViewDynamicPath *)dynamicPath{
    UITableViewCell *cell = [UITableViewCell new];
    switch (dynamicPath.enumIndex) {
        case EnumDynamicSection_1: {
            cell.textLabel.text = @"固定分区";
        } break;
        case EnumDynamicSection_2: {
            cell.textLabel.text = [NSString stringWithFormat:@"动态分区一 - %ld",dynamicPath.index];
        } break;
        case EnumDynamicSection_3: {
            cell.textLabel.text = @"固定分区";
        } break;
        case EnumDynamicSection_4: {
            cell.textLabel.text = [NSString stringWithFormat:@"动态分区二 - %ld",dynamicPath.index];
        } break;
        case EnumDynamicSection_5: {
            cell.textLabel.text = @"固定分区";
        } break;
        case EnumDynamicSection_6: {
            cell.textLabel.text = [NSString stringWithFormat:@"动态分区三 - %ld",dynamicPath.index];
        } break;
        default:
            break;
    }
    return cell;
}

@interface LYTableViewDynamicPath : NSObject
@property (nonatomic, assign) NSInteger enumIndex;      // 动态分区所在枚举
@property (nonatomic, assign) NSInteger index;          // 分区在该动态区域的第几个

@end

效果:



cell动态化

Releases

No releases published

Packages

No packages published