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

时间:2015-05-14 08:00:23

标签: watchkit ios8.2 wkinterfacetable wkinterfacecontroller

我有一个 WKInterfaceController ,我添加了一个表格如下:

// .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的任何协议声明,也没有找到表中的任何委托属性。

我在这里缺少什么东西吗?

3 个答案:

答案 0 :(得分:5)

我发现该方法从未被调用过,因为我在“接口”构建器上选择了行时设置了一个segue。

似乎通过在设置委托后没有委托和表协议,它会停止调用didSelectRow方法。

答案 1 :(得分:3)

在Apple的WKInterfaceController文档中,它指出如果你没有任何动作或segue,那么调用的方法是: - table:didSelectRowAtIndex:

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

对于按钮: - contextForSegueWithIdentifier:

表格: - contextForSegueWithIdentifier:inTable:rowIndex:

答案 2 :(得分:0)

快捷键4

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

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

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