IGInterfaceDataTable 是 WKInterfaceTable 上的一个类别,它使得配置具有多维度数据的表格更容易。您无需将数据结构扁平化成一个数组,而是可以使用类似于 UITableViewDataSource
的数据源模式来配置您的手表表格。
使用 IGInterfaceDataTable 构建具有复杂数据结构的精美 Apple Watch 应用程序,就像在 Instagram Apple Watch 应用程序中一样。
您可以使用 CocoaPods 快速安装 IGInterfaceDataTable。将以下内容添加到您的 Podfile 中
pod 'IGInterfaceDataTable'
如果您愿意手动安装框架,只需将 WKInterfaceTable+IGInterfaceDataTable.h
和 WKInterfaceTable+IGInterfaceDataTable.m
文件复制到您的 WatchKit 扩展目标的项目中即可。
导入框架头文件,或如果您使用的是 Swift,创建一个 Objective-C 桥接头。
#import <IGInterfaceDataTable/IGInterfaceDataTable.h>
为了开始使用 IGInterfaceDataTable,您只需将对象符合 IGInterfaceTableDataSource
(定义如下此处)并将其设置为表格的 ig_dataSource
。
您需要实现两种方法以开始显示数据。第一个返回一个区段的行数。
- (NSInteger)numberOfRowsInTable:(WKInterfaceTable *)table section:(NSInteger)section {
return self.items.count;
}
注意:如果您没有实现 numberOfSectionsInTable:
,数据源默认只有一个区段。
另一个必需的方法返回在您的 WatchKit 故事板中配置的行控制器的 标识符。
- (NSString *)table:(WKInterfaceTable *)table rowIdentifierAtIndexPath:(NSIndexPath *)indexPath {
return @"RowIdentifier";
}
除了必需的方法之外,您还可以为 标题、页脚甚至区段标题提供标识符。查看头文件文档,看看您可以做什么!
IGInterfaceDataSource 提供了方便的方法,以在您重新加载或向 WKInterfaceTable 添加数据时更新您的行控制器。
以下方法会将表格中行的行控制器传递给数据源。然后,您可以自由地配置行,例如设置文本标签或添加图片。
- (void)table:(WKInterfaceTable *)table
configureRowController:(NSObject *)rowController
forIndexPath:(NSIndexPath *)indexPath {
MyController *controller = (MyController *)rowController;
[controller.textLabel setText:@"Hello!"];
}
还有配置标题、页脚和区段的方法。
IGInterfaceDataSource 还提供了方法,使在 WKInterfaceTable
和您的数据结构之间进行桥接更加无缝。
例如,为了将行选择映射回您数据的索引路径,您需要调用 -[WKInterfaceTable indexPathFromRowIndex:]
- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex {
NSIndexPath *indexPath = [table indexPathFromRowIndex:rowIndex];
if (indexPath) {
// do something with the index path or data
}
}
或者,您可以直接滚动到某个部分,而无需查找数据的行索引
[table scrollToSection:section];
由于 WKInterfaceTable
对象必须从 Storyboard 中初始化,并且尚未提供在代码中创建 WatchKit Storyboard 的机制,因此我们目前无法使用 Xcode 单元测试。
目前,测试是通过执行 ApplicationTests WatchKit 扩展并确保没有断言被触发来手动运行的。
请参阅 CONTRIBUTING 文件了解更多帮助信息。
IGInterfaceDataTable 是采用 BSD 许可的。我们还提供额外的专利许可。