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) 推送动作

Apple Watch、WatchKit 和 NSUserDefaults [重复]

是否可以在实际 Apple Watch 设备上运行 WatchKit 应用程序?

WatchKit 中的本地通知

WatchKit WatchOS - Apple Watch 上从未显示定位服务提示

Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?