DETableViewCell 0.0.2

DETableViewCell 0.0.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最新发布2014年12月

Dream Engine 维护。



https://github.com/dreamengine/DETableViewCell

它做什么

DETableViewCell 是一个 MIT 许可的 UITableViewCell 替换,使得单元格管理变得简单。它负责为每个 DETableViewCell 子类创建和维护 UINibs,使得 UINibs 能够在多个控制器之间重用,无需担心。

它是怎么工作的

DETableViewCell 子类化

在创建自定义单元格时,从 DETableViewCell 而不是 UITableViewCell 继承。由于 DETableViewCell 本身就是 UITableViewCell 的子类,因此改变您的自定义单元格的上层类不会丢失任何内容。

示例

@interface MyCustomCell : DETableViewCell
...
@end

@implementation MyCustomCell
...
@end

访问 UINibs

要访问单元格类的 UINib,只需在该类上使用 +cellNib。如果已为该类创建了 UINib 实例,则此方法将直接返回该对象。否则,此方法将自动为该类创建新的 UINib,存储在 DETableViewCell 缓存中,并返回该对象。nib 实例化过程要求 .xib/.nib 文件与 DETableViewCell 子类的名称相同。

示例

#import "MyCustomCell.h"
#import "OtherCustomCell.h"

@implementation SomeObject

-(void)someMethod {
    UINib *myNib = [MyCustomCell cellNib];  // returns a UINib loaded with "MyCustomCell.nib"
    UINib *otherNib = [OtherCustomCell cellNib];    // returns a UINib loaded with "OtherCustomCell.nib"
}

@end

手动实例化

如果需要手动创建单元格实例,只需在您的 DETableViewCell 子类上使用 +cell 即可,这将利用 UINib 缓存系统从对应的 nib 文件中膨胀。

示例

-(void)someMethod {
    MyCustomCell *customCell = [MyCustomCell cell];
}

重用标识符

为了进一步简化应用程序中表格单元格的使用,DETableViewCell 提供了使用 NSStringFromClass() 的默认重用标识符。无论是 +reuseIdentifier 还是对 -reuseIdentifier,它们都返回相同的字符串,这使得在注册 nib 和从 UITableViews 中排空单元格都更容易。

示例

#import "MyCustomCell.h"
#import "OtherCustomCell.h"

@implementation SomeController

-(void)viewDidLoad {
    [super viewDidLoad];

    [self.tableView registerNib:MyCustomCell.cellNib forCellReuseIdentifier:MyCustomCell.reuseIdentifier];
    [self.tableView registerNib:OtherCustomCell.cellNib forCellReuseIdentifier:OtherCustomCell.reuseIdentifier];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 0) {
        MyCustomCell *customCell = [self.tableView dequeueReusableCellWithIdentifier:MyCustomCell.reuseIdentifier forIndexPath:indexPath];
        return customCell;
    }
    else {
        OtherCustomCell *otherCell = [self.tableView dequeueReusableCellWithIdentifier:OtherCustomCell.reuseIdentifier forIndexPath:indexPath];
        return otherCell;
    }
}

UITableView 分类

还提供了一个 UITableView 分类来简化重用注册。不用使用 -registerNib:forCellReuseIdentifier:,只需使用 -registerDETableViewCellClass:

示例

-(void)viewDidLoad {
    [super viewDidLoad];

    [self.tableView registerDETableViewCellClass:MyCustomCell.class];
    [self.tableView registerDETableViewCellClass:OtherCustomCell.class];
}

手动缓存管理

DETableViewCell 使用了一个自定义的 NSCache 对象,这个对象也会对低内存警告做出响应。当内存限制增加时,缓存将自动驱逐项目,这意味着你不必担心 DETableViewCell 的缓存策略。

但是,可能有时你需要手动删除缓存 UINib 以在选择内存限制发生之前从内存中移除。要这样做,请在相应的类上调用 +removeCellNibFromCache

也可能存在一些情况,在这种情况下,手动清除整个 UINib 缓存是合理的。要这样做,请在任何 DETableViewCell 类上调用 +removeAllCellNibsFromCache

示例

-(void)someMethod {
    [MyCustomCell removeCellNibFromCache];  // remove MyCustomCell's UINib from the cache
    [DETableViewCell removeAllCellNibsFromCache]; // remove all UINibs from the cache
}