2016-02-13 156 views
1

我正在使用一個庫來管理視圖控制器之間的刷新。swift - 從另一個視圖控制器調用代碼

好像,我可以用我的視圖控制器的一個按鈕,瀏覽其他的唯一途徑是通過調用從管理刷卡功能視圖控制器的具體方法。

有沒有辦法在不同的視圖控制器中調用方法?

謝謝

+0

什麼是圖書館? –

+0

EZSwipeController。看起來他們有導航控制器按鈕的默認功能,但我只想使用常規按鈕。 – Walking

+0

你能否詳細說明你到底想要達到什麼目的? 「來自另一個視圖控制器的調用代碼」對我來說似乎有點模糊...更多細節會更好 –

回答

0

在視圖控制器之間進行通信的方式很多。在iOS上最常見的模式之一是delegate pattern。一個視圖控制器擁有對另一個的引用,並且代表符合protocol。該協議是第一個視圖控制器在發生特定事件時可以調用的一組方法。我會嘗試設置一個協議,並讓你的一個視圖控制器成爲另一個的代理

+0

感謝您的回覆。你能指點我一個資源嗎?這聽起來有點兒熟悉,但實施似乎很嚇人。謝謝 – Walking

+0

我在那裏爲委託模式和協議添加了兩個鏈接。請參閱本網站上的「授權」部分:http://www.raywenderlich.com/46988/ios-design-patterns –

0

如果你看看在GitHub上託管的代碼,你可以看到頁面控制器是從EZSwipeController類。因此,鑑於您的子類EZSwipeController(或在某處維護引用),您現在可以訪問它的pageViewController屬性並滾動到給定頁面。

如果子類:

class MyVC : EZSwipeController{ 
    func buttonTapped(){ /* use self.pageViewController to "page" */ } 
} 

古怪,我從來沒有親自UIPageViewController工作,而據我可以告訴有滾動到頁面中的輕鬆時尚的無容易方式。

我沒有親自嘗試過(我通常在發佈前驗證我的答案),但你應該能夠把它關閉。如果您沒有對視圖控制器的引用,則需要獲取它(讓我知道這是否是核心問題)。

有,似乎享受有關UIPageViewController分頁一些流行的SO一個問題:

UIPageViewController, how do I correctly jump to a specific page without messing up the order specified by the data source?

而且從Apple docs

enter image description here

我也鼓勵你看看裏面的代碼在EZSwipeController回購,在那裏你可以找到一個非暴露方法,做滾動的:

@objc private func clickedLeftButton() { 
     let currentIndex = stackPageVC.indexOf(currentStackVC)! 
     datasource?.clickedLeftButtonFromPageIndex?(currentIndex) 

     let shouldDisableSwipe = datasource?.disableSwipingForLeftButtonAtPageIndex?(currentIndex) ?? false 
     if shouldDisableSwipe { 
      return 
     } 

     if currentStackVC == stackPageVC.first { 
      return 
     } 
     currentStackVC = stackPageVC[currentIndex - 1] 
     pageViewController.setViewControllers([currentStackVC], direction: UIPageViewControllerNavigationDirection.Reverse, animated: true, completion: nil) 
    } 

「密鑰」行是這一個:

pageViewController.setViewControllers([currentStackVC], direction: UIPageViewControllerNavigationDirection.Reverse, animated: true, completion: nil) 

我覺得EZSwipeController也暴露了視圖控制器包含在pageViewController中,該屬性名爲stackVC,它是包含在頁面視圖控制器中的視圖控制器的數組。

我認爲這方面的知識,你應該能夠頁到指定頁面,儘管(從一開始就恕我直言,開發商應該暴露分頁邏輯),似乎有點「哈克」。

我畢竟這對你的建議很簡單:

嘗試自己滾吧。這不是一項巨大的任務,您可以完全控制可訪問的內容以及如何使用它。 EZSwipeController類很小,所以你不必爲自己的解決方案編寫大量的代碼。你也可以繼續前進,並分解回購並根據你的喜好修改/使用它。

我希望有幫助。如果您還有其他問題或者有什麼不清楚的地方,我會隨時爲您提供幫助。

相關問題