我现在已经尝试了一段时间来解决我的WatchKit应用中的问题,并希望有人可能有一些见解。
最初,我将我的应用程序构建为分层导航布局,其中我的初始视图控制器显示一个填充了一些数据的表格,用户可以点击一个单元格并按下#34;到具有更多上下文信息的详细接口控制器(数据被收集为JSON数据并通过共享应用程序组从iOS应用程序传递)。
根据开发人员文档,除非涉及模式,否则无法混合分层和基于页面的布局。理想情况下,我希望用户点击我的初始表格中的单元格,弹出模态弹出窗口,然后让用户可以翻阅的多个页面根据他们选择的单元格显示详细信息。
对于我的生活,我无法弄清楚如何使这项工作。如果没有涉及基于页面的布局,该应用程序工作正常。用户点击一个单元格,弹出一个模态,并显示正确的上下文信息。如果我添加一个新的接口控制器并使用我的模态中的nextPage进行segue,则不会传递任何上下文信息,并且任何命令都将停止运行。如果我删除了我的nextPage segue,应用程序将返回正常运行状态。
这是我的 InterfaceController.swift 文件;
import WatchKit
class InterfaceController: WKInterfaceController {
var minions = [Minion]()
@IBOutlet weak var minionTable: WKInterfaceTable!
let defaults = NSUserDefaults(suiteName:
"group.com.mygroup.data")
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
//Load the table
reloadTable()
//Get the data passed from the iOS app
WKInterfaceController.openParentApplication(["request": "refreshData"], reply: { (replyInfo, error) -> Void in
if let minionData = replyInfo["minionData"] as? NSData {
NSKeyedUnarchiver.setClass(Minion.self, forClassName: "Minion")
if let minions = NSKeyedUnarchiver.unarchiveObjectWithData(minionData) as? [Minion] {
self.minions = minions
self.reloadTable()
}
println("dataTest: \(self.minions)")
}
})
}
func reloadTable() {
if minionTable.numberOfRows != minions.count {
minionTable.setNumberOfRows(minions.count, withRowType: "MinionTableRowController")
}
for (index, minion) in enumerate(minions) {
if let row = minionTable.rowControllerAtIndex(index) as? MinionTableRowController {
row.interfaceGroup.setBackgroundColor(UIColor(red: 39.0/255.0, green: 148.0/255.0, blue: 197.0/255.0, alpha: 1.0))
row.interfaceLabel.setText(minion.name)
row.interfaceDetails.setText("\(age!) years old")
}
}
}
override func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject? {
if segueIdentifier == "minionSegue" {
let minion = minions[rowIndex]
return minion
}
return nil
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
NSLog("%@ will activate", self)
}
//I have nothing to put here
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
NSLog("%@ did deactivate", self)
super.didDeactivate()
}
}
我可以根据需要提供更多信息,但似乎将数据传递到多个页面与将数据传递到一个页面不同。非常感谢任何帮助!