VMTableViewStaticCells 0.1

VMTableViewStaticCells 0.1

测试已测试
语言语言 Obj-CObjective C
许可证 BSD
发布上次发布2014 年 12 月

未知 维护。



  • Vittorio Monaco

VMTableViewArrayDataSource

一个简单的类别,可以不用使用故事板来使用静态 UITableViewCells

安装

如果您使用 CocoaPods,做法很简单

pod 'VMTableViewStaticCells'

如果您不使用 CocoaPods,只需下载源代码并将 VMTableViewStaticCells 文件夹的内容复制到您的项目中。您可以 #import "UITableView+StaticCells.h",这就是您所需要的全部。

使用

设置 UITableView

要通过代码设置 UITableView 使用静态单元格,您只需这样做

self.tableView.dataSource = self.tableView;
self.tableView.chainedDelegate = self;

不用担心将 dataSource 设置为 tableView 本身,它将自动将所有方法转发到 chainedDelegate

通过代码设置一个静态单元格

操作非常简单,只需调用

self.tableView.items[0][1] = staticCell;

然后第一部分的第二行将自动成为一个静态单元格,如同在 staticCell 实例中设置的。

从 XIB 加载一个静态单元格设置

没有比这更简单的了,只需

self.tableView.items[1][1] = [UITableViewCell loadFromNib:@"StaticCells" cellWithIdentifier:@"buttonCell"];

来加载具有 "buttonCell" 相同 reuseIdentifierUITableViewCell。或者,如果您想使用标签,

self.tableView.items[1][3] = [UITableViewCell loadFromNib:@"StaticCells" cellWithTag:10];

并将 UITableViewCell 从同一个 XIB 加载,但基于标签值。

混合静态和动态单元格

您可以设置一个完全静态的 UITableView,但也有可能混合静态和动态单元格,在同一个部分或不同的部分。要这样做,只需像上面设置您需要的那些静态单元格。在

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

方法中,您会自动获得将 indexPath 转换到您的系统的值。这意味着,例如

self.tableView.items[0][0] = staticCell1;
self.tableView.items[0][2] = staticCell2;

self.dynamicItems = @[myItem, myItem2];

在这个场景中,您将只得到

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

被调用两次。一次用于项目 [0][1],一次用于项目 [0][3]。但是,您实际上会得到包含值的索引路径 [0][0][0][1],这样您不需要记住静态单元格的位置,也不需要转换数组的索引,因为这一切都是由 UITableView 自动完成的;无论如何,如果您设置了聪明的转换索引的方法,或者使用了一些不关心索引转换的数据结构,您总是可以通过调用

[indexPath originalIndexPath];

请注意,在

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

您应该只返回您自己管理的部分数量(不是只有静态单元格的部分)。为了帮助类别更好地工作,请

返回 0

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

对于所有你不管理的部分(完全静态的部分),例如以下片段

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(section == 0)
        return _firstSectionObjects.count;
    else if(section == 1)
        return _secondSectionObjects.count;
    else if(section == 3)
        return _fourthSectionObjects.count;
    else
        return 0; //third section is completely static
}

设置静态单元格的高级方法

设置静态单元格有几种方式。除了程序化或从 XIB 文件初始化单元格外,您还可以以下方式设置静态单元格的数组

  • 您可以直接传递一个 NSIndexPath 以替代使用索引索引方式。
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:2];
self.tableView.items[indexPath] = staticCell1;
  • 您可以传递一个包含静态单元格的整个 NSArray
self.tableView.items[1] = @[staticCell1, staticCell2, staticCell3];

运行时移除静态单元格

在用户生成一些有趣的事件后完成静态单元格,您只需将静态单元格设置为 nil,然后在您准备好的时候重新加载数据。

self.tableView.items[0][0] = nil;
[self.tableView reloadData];