没有为WKInterfaceTable调用didSelectRowAtIndex

时间:2016-03-19 17:29:41

标签: ios swift watchkit wkinterfacetable

我在故事板中创建了一个推送segue,从WKInterfaceTableCell到另一个WKInterfaceController(称为DetailInterfaceController)。

当我点击该行时,didSelectRowAtIndex未被调用。

有人知道我哪里出错了,我怎么能传递这个字符串?

TableInterfaceController

didSelectRowAtIndexPath print语句未被调用

@IBOutlet var table: WKInterfaceTable!
var objectsArray = ["1","2","3"]
var object: String!

override func table(table: WKInterfaceTable, didSelectRowAtIndex rowIndex: Int) {
    self.object = self.objectsArray[rowIndex]

    print(" object title: \(self.object)")
}


override func contextForSegueWithIdentifier(segueIdentifier: String) -> AnyObject? {
    // You may want to set the context's identifier in Interface Builder and check it here to make sure you're returning data at the proper times

    // Return data to be accessed in ResultsController
    return self.object
}

DetailsInterfaceController

标签未设置

@IBOutlet var label: WKInterfaceLabel!

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)

    // Make sure data was passed properly and update the label accordingly
    if let val: String = context as? String {
        self.label.setText(val)
    } else {
        self.label.setText("")
    }
    // Configure interface objects here.
}

3 个答案:

答案 0 :(得分:5)

为什么不调用

由于您使用了故事板segue,因此table:didSelectRowAtIndex:不被调用是正常的。来自WKInterfaceController文档:

  

如果您将动作方法与故事板文件中的表格相关联, WatchKit不会调用此方法

如何传递选定的行数据:

您应该使用contextForSegueWithIdentifier:inTable:rowIndex:返回所选行的上下文:

override func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject? {
    if segueIdentifier == "someSegueIdentifier" {
        return objectsArray[rowIndex]
    }
    return nil
}

答案 1 :(得分:0)

请注意,table:didSelectRowAtIndex:不会由于另一个明显的原因而起作用:WKInterfaceButton被放置在该行上,用户点击该行。在这种情况下,tap事件将仅针对按钮触发。委托方法将不起作用。解决方案是从WKInterfaceButton的行中删除WKInterfaceTable

答案 2 :(得分:0)

我遇到了同样的问题,结果我取消了故事板中行项目的“可选”框

overview