我一直在尝试根据所选行在WatchKit中设置分层表。
我知道这涉及使用contextForSegueWithIdentifier
。
有人可以解释如何将选定的行详细信息提供给目标接口控制器吗?
@IBOutlet var mainTable:WKInterfaceTable!
let mains = ["Full Schedule", "Custom Sched."]
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
loadTableData()
}
private func loadTableData() {
mainTable.setNumberOfRows(mains.count, withRowType: "InterfaceTableRowController")
for (index, mainName) in mains.enumerate() {
let row = mainTable.rowControllerAtIndex(index) as! InterfaceTableRowController
row.interfaceLabel.setText(mainName)
}
}
override func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject?
{
let mainName = mains[rowIndex]
return mainName
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
NSLog("%@ will activate", self)
}
好的,所以这就是我[我只是我的控制器之一],并假设如果我选择完整的时间表,它将显示星期四的列表>星期五>周六>星期天....但如果我选择自定义它会显示名称>名称>名称>名称
答案 0 :(得分:1)
简而言之,它与prepareForSegue
略有相似,但是您返回一个要传递给目标接口控制器的上下文,而不是直接在目标接口控制器上设置属性。
在源界面控制器中,您覆盖contextForSegueWithIdentifier
,并检查故事板segueIdentifier
以确定正在发生的segue。
接下来,您使用rowIndex从其mains
数组中检索该行的数据。
最后,您将返回该数据,该数据将是目标接口控制器将访问的上下文。
在您的示例中,您将返回表示所选计划类型的字符串:
override func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject? {
if segueIdentifier == "showSchedule" {
return mains[rowIndex]
}
return nil
}
在目标接口控制器中,您可以访问提供的上下文。
在这种情况下,它是所选计划的类型。您为该类型的计划配置了数组,然后填充表。
@IBOutlet weak var scheduleTable: WKInterfaceTable!
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Configure table here.
guard let context = context as? String else {
return
}
// Load the table based on the type of (full or custom) schedule
if context == "Full schedule" {
loadFullSchedule()
} else if context == "Custom Sched." {
loadCustomSchedule()
}
}