WKInterfaceTable 的 didSelectRowAtIndex 永远不会在 WKInterfaceController 中被调用

WKInterfaceTable's didSelectRowAtIndex never gets called in WKInterfaceController

我有一个 WKInterfaceController 并且我添加了一个 table 如下:

// .h

@interface InterfaceController : WKInterfaceController
@property (weak, nonatomic) IBOutlet WKInterfaceTable *table;
@end

// .m
- (void)table:(WKInterfaceTable *)table didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"did select");
}

- (void)table:(WKInterfaceTable *)table
didSelectRowAtIndex:(NSInteger)rowIndex{
    NSLog(@"did select new");
}

然而,这两种方法都没有被调用。我找不到 WKInterfaceTable 的任何协议声明,也找不到 table 上的任何委托 属性。

这里有我遗漏的东西吗?

我发现该方法从未被调用,因为我已经设置了一个 segue,以便在选择界面生成器上的行时触发。

似乎通过没有委托和 table 协议,一旦您设置了委托,它就会停止调用 didSelectRow 方法。

Apple 的 WKInterfaceController 文档指出,如果您没有任何操作或转场,则调用的方法是: - table:didSelectRowAtIndex:

如果您使用 segues,那么调用的方法是:

对于按钮: -contextForSegueWithIdentifier:

对于表格: - contextForSegueWithIdentifier:inTable:rowIndex:

Swift 4

这是在 REST/JSON 实现中选择 WKInterfacetable 行的示例。

创建数组 class 的上下文 属性 实例,而不是使用 self.pushController

override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {
    let message = messageObjects[rowIndex]
    presentController(withName: "MessageView", context: message)
}