我一直在尝试根据选定的行在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)
}
好的,所以这是我[仅作为我的一个控制器]的位置,并假设如果我选择完整的日程表,它将显示星期四>星期五>星期六>星期日....的列表,但是如果我选择自定义,它将显示显示名称>名称>名称>名称
最佳答案
简而言之,它与prepareForSegue
有点类似,但是您返回一个要传递给目标接口控制器的上下文,而不是直接在目标接口控制器上设置属性。
contextForSegueWithIdentifier
,并检查情节提要segueIdentifier
以确定发生了哪种segue。 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()
}
}