Watchkit:动态行中有两个模板的表
Posted
技术标签:
【中文标题】Watchkit:动态行中有两个模板的表【英文标题】:Watchkit: table with two templates in dynamic rows 【发布时间】:2014-11-27 19:12:51 【问题描述】:如何在WKInterfaceTable中实例化两个不同的动态行模板?我只对一个模板使用函数
[self.stocksTable setNumberOfRows: self.stocksData.count withRowType:@"TableRow"];
TableRow *row = [self.stocksTable rowControllerAtIndex:i];
问题:如何有两种类型的行?
【问题讨论】:
【参考方案1】:你想要-[WKInterfaceTable setRowTypes:]
:
[self.myTable setRowTypes:@[@"RowType1", @"RowType2"]];
MyRowType1Controller *row1 = [self.myTable rowControllerAtIndex:0];
MyRowType2Controller *row2 = [self.myTable rowControllerAtIndex:1];
【讨论】:
谢谢,我不知道我们之前需要为每一行手动指定类型数组。为我工作!【参考方案2】:基于@dave-delong(正确!)的答案,大多数表将混合行类型,并且数组必须反映这一点。例如,一个带有页眉、4 行信息和一个页脚的表格需要一个看起来像这样的数组:
NSArray *rowTypes = @[@"headerRowType", @"infoRowType", @"infoRowType", @"infoRowType", @"infoRowType", @"footerRowType"];
[self.myTable setRowTypes:rowTypes];
【讨论】:
【参考方案3】:Swift 解决方案,用于动态单元格计数的情况:
let notificationRowTypes = Array(repeating: "notificationRow", count: watchNotifications.count)
let notificationDateRowTypes = Array(repeating: "notificationDateRow", count: watchNotifications.count)
let rowTypes = mergeArrays(notificationDateRowTypes, notificationRowTypes)
noficationsTable.setRowTypes(rowTypes)
updateTableRowsContent()
func mergeArrays<T>(_ arrays:[T] ...) -> [T]
return (0..<arrays.map$0.count.max()!)
.flatMapi in arrays.filteri<$0.count.map$0[i]
func updateTableRowsContent()
let numberOfRows = noficationsTable.numberOfRows
for index in 0..<numberOfRows
switch index % 2 == 0
case true:
guard let controller = noficationsTable.rowController(at: index) as? NotificationDateRowController else continue
controller.notification = watchNotifications[index / 2]
case false:
guard let controller = noficationsTable.rowController(at: index) as? NotificationRowController else continue
controller.notification = watchNotifications[index / 2]
【讨论】:
以上是关于Watchkit:动态行中有两个模板的表的主要内容,如果未能解决你的问题,请参考以下文章
Apple Watch、WatchKit 和 NSUserDefaults [重复]
是否可以在实际 Apple Watch 设备上运行 WatchKit 应用程序?