2016-03-20 118 views
0

我有一個類的實例來處理和實現我的視圖控制器之間的滑動導航。我在該類中有一個方法,它允許我模擬滑動導航到另一個視圖控制器。另一個類沒有創建實例的調用方法

在一個完美的場景中,我會向IB中的視圖控制器添加一個按鈕,並在其動作中調用處理程序類的方法以導航到其他視圖控制器。

這似乎是我試圖重新創建一個實例,顯然不工作,因爲它沒有所有的信息其他實例。

我也嘗試從處理程序類本身添加一個按鈕的子視圖到我的視圖控制器,這工作,但我想知道是否有更漂亮的方式。

也許從我的其他視圖控制器訪問已存在的類的實例,以調用該方法?我試過swipe().navigateToLeftVC()並重新創建實例。

+0

我剛剛注意到初始實例是在應用程序委託中創建的,並分配給了window.rootviewcontroller。這會有什麼幫助嗎?再次感謝 – Walking

+1

也許你可以創建一個具有如下實例值的全局變量:'let myInstance = myClass()',然後在需要調用函數時引用該實例。由於它是在全局範圍內定義的,因此可以在任何地方引用該實例。另外,也許創建一個單例而不是全局變量。 – Harish

+0

您也可以將實例傳遞給每個視圖控制器 – Shades

回答

1

我通過創建一個單例解決了這個問題。

將此代碼添加到我的控制器

class var sharedManager: controllerName { 
     struct Static { 
      static let instance = controllerName() 
     } 
     return Static.instance 
    } 

然後在我指定以我用controllerName.sharedManager根視圖控制器,其返回我的單個實例我的應用程序委託。

然後在我的其他視圖控制器中,當我想調用該類的方法時,我使用了controllerName.sharedManager.methodName()

完美地工作。

+1

雖然這可能在此應用程序中正常工作。你真的應該避免讓View Controller不必要的實例。用這種方法,你現在有兩個版本的* controllerName()*類。這可能會導致未來出現意想不到的問題。我有一些可能的替代方案給你。你在使用導航控制器嗎? –

+1

確實這個詞*完美*在這裏是一個延伸。這不是一個完美的解決方案。它可以工作,當然。但實際上,這不是理想的解決方案。我們需要在實際的代碼中看到更多的內容,才能理解爲什麼你甚至覺得這是必要的。 – nhgrif

+0

謝謝大家分享你的知識。 @nhgrif:我有一個類(EZSwipeController),通過你的視圖控制器實現側滑動。它帶有一個我不使用的導航控制器實現,因爲它不適合我的應用程序。所以,我需要一種能夠在我的視圖控制器中擁有按鈕的方法,這些按鈕調用EZSwipeController庫的方法,以便擁有一個替代方法來滑動視圖控制器並能夠瀏覽按鈕操作。你能解釋我如何有兩個版本的controllerName,如果我只是實例化1? – Walking

相關問題