Ios 基于页面的模式布局暂停WatchKit应用程序

Ios 基于页面的模式布局暂停WatchKit应用程序,ios,swift,watchkit,Ios,Swift,Watchkit,我已经尝试了一段时间来找出我的WatchKit应用程序中的一个问题,希望有人能有所了解 最初,我将我的应用程序构建为一个分层导航布局,其中我的初始视图控制器显示一个填充了一些数据的表,用户可以点击一个单元格,然后被“推”到包含更多上下文信息的详细界面控制器(数据被收集为JSON数据,并通过共享应用程序组从iOS应用程序传递) 根据开发人员文档,除非涉及模式,否则不可能混合层次结构和基于页面的布局。理想情况下,我希望用户点击初始表中的一个单元格,创建一个模式弹出窗口,然后创建多个页面,用户可以翻阅

我已经尝试了一段时间来找出我的WatchKit应用程序中的一个问题,希望有人能有所了解

最初,我将我的应用程序构建为一个分层导航布局,其中我的初始视图控制器显示一个填充了一些数据的表,用户可以点击一个单元格,然后被“推”到包含更多上下文信息的详细界面控制器(数据被收集为JSON数据,并通过共享应用程序组从iOS应用程序传递)

根据开发人员文档,除非涉及模式,否则不可能混合层次结构和基于页面的布局。理想情况下,我希望用户点击初始表中的一个单元格,创建一个模式弹出窗口,然后创建多个页面,用户可以翻阅这些页面,其中包含基于所选单元格的详细信息

就我的一生而言,我不知道如何使这项工作。如果没有涉及基于页面的布局,则应用程序工作正常。用户点击一个单元格,弹出一个模式,并显示适当的上下文信息。如果我添加了一个新的接口控制器,并从我的模式下添加了一个下一页,则不会传递任何上下文信息,任何命令都会停止运行。如果我删除我的下一页segue,应用程序将恢复正常运行

这是我的InterfaceController.swift文件


我可以根据需要提供更多信息,但似乎将数据传递到多个页面与将数据传递到一个页面不同。非常感谢您的帮助

你想要实现的目标是绝对可行的。事实上,这就是我的应用程序的工作原理。请尝试在
WKInterfaceController
上调用
presentControllerWithNames:contexts:
以在有人选择行时显示命名的界面控制器,而不是为您的序列使用界面生成器。这至少值得一试,看看这种方法是否适合你。谢谢,@MikeSwanson,我相信这是正确的选择。根据您的建议,我应该在InterfaceController.swift文件的何处放置
presentControllerWithNames:contexts:
命令?如果我有一个按钮可以指向下一个界面控制器,我在网上找到了一些关于如何执行此操作的非常有用的数据,但是如果我的“按钮”实际上是我的表行,您可以在
WKInterfaceController
上实现
table:didselectRowatinex:
方法来检测行点击。更多这里::得到它的工作!谢谢你@MikeSwanson!我使用了
table:didselectrowatinex:
方法,结合使用
presentcontrollerwhithnames:context:
正确调用控制器中的多个页面。数据正在正确传递!
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()
}

}