2015-11-10 66 views
3

我在手錶應用程序的擴展代理中觀看了連接設置,我想在調用某個方法時推送控制器。但不能在擴展委託上調用pushControllerWithName:context:如何從ExtensionDelegate推控制器WatchKit

有沒有辦法從推廣代表推控制器?

萬分感謝

+0

您可以從您的分機代表通過'[WKExtension sharedExtension] .rootInterfaceController' – dan

+0

喜丹根接口控制器的參考,這是偉大的。非常感謝。我還可以問什麼是最好的代碼,然後在應用程序代理上激活所按下的控制器上的UIbutton動作。 – Ultronn

+0

您可以使用委託模式。簡而言之::你在你的擴展中有一個委託變量並且調用它。它由控制器在你想要推送的地方執行。控制器你想從推送集extension.myDelegate = self。 –

回答

-1

你可以繼承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 
     } 
    } 

    ... 
} 
+0

嗨,謝謝你。我試圖繼承視圖控制器,但作爲appDelegate(我想要行動的代碼)是NSObject它不讓我做它與UIResponder和UIViewController錯誤的多個繼承評論。我想知道上面提到的Gerd委託方法可能是最好的方法,但我正努力嘗試新的編碼方式。有沒有人知道我能找到一些關於如何做到這一點的swift代碼?在此先感謝幫助新手:) – Ultronn

2

正如@丹已經在評論中指出的,您可以使用[WKExtension sharedExtension].rootInterfaceController得到你的根控制器的參考。從那裏你可以使用pushControllerWithName:context:來推動控制器。

+0

Swift3更新:'WKExtension.shared()。rootInterfaceController?' –

0

我發現添加下面的行來讓根控制器爲我使用Swift工作。

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