【问题标题】:How to push controller from ExtensionDelegate WatchKit如何从 ExtensionDelegate WatchKit 推送控制器
【发布时间】:2015-11-10 19:49:26
【问题描述】:

我在我的手表应用程序的扩展委托中设置了手表连接,我想在调用某个方法时推送一个控制器。但是不能在扩展委托上调用 pushControllerWithName:context:

有没有办法可以从扩展代理推送控制器?

谢谢一百万

【问题讨论】:

  • 您可以通过[WKExtension sharedExtension].rootInterfaceController从您的扩展委托中获取对您的根接口控制器的引用
  • 嗨,丹,太好了。非常感谢。我还可以问什么是最好的代码,然后从应用程序委托中激活该推送控制器上的 UIbutton 操作
  • 您可以使用委托模式。简而言之:: 你的扩展中有一个委托变量并调用它。它由您要从中推送的控制器实现。您要从中推送的控制器设置 extension.myDelegate = self.
  • @GerdCastan 听起来很完美。你知道我能找到一些示例代码吗?我的主要语言是快速的编码新手。谢谢。

标签: ios controller push watchkit watchos-2


【解决方案1】:

正如@dan 在 cmets 中指出的那样,您可以使用 [WKExtension sharedExtension].rootInterfaceController 获取对根控制器的引用。从那里您可以使用pushControllerWithName:context: 推送控制器。

【讨论】:

  • Swift3 更新:WKExtension.shared().rootInterfaceController?
【解决方案2】:

我发现添加下面的行来让根控制器使用 Swift 对我有用。

rootInterfaceController?.pushController(withName: "MapController", context: path)

【讨论】:

    【解决方案3】:

    您可以继承WKInterfaceController 并将当前控制器存储在某个地方。

    class BaseInterfaceController: WKInterfaceController {
        ...
    
        override func willActivate() {
            super.willActivate()
    
            // store current controller with some weak reference
            XXXManager.shareInstance().currentController = self
        }
    
        override func didDeactivate() {
            super.didDeactivate()
    
            if XXXManager.shareInstance().currentController == self {
                XXXManager.shareInstance().currentController = nil
            }
        }
    
        ...
    }
    

    【讨论】:

    • 您好,谢谢。我试图继承 View 控制器,但由于 appDelegate(我想在其中执行代码)是 NSObject,它不允许我使用来自 UIResponder 和 UIViewController 错误的注释多重继承来做到这一点。我想知道上面提到的委托方法 Gerd 是否可能是最好的方法,但我正在努力成为编码新手。有谁知道我可以找到一些关于如何执行此操作的示例 swift 代码?在此先感谢您帮助新手 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2010-12-11
    • 2016-02-07
    • 2010-12-20
    • 2015-05-23
    相关资源
    最近更新 更多