我在故事板中创建了一个推送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.
}
答案 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)