swift - 从另一个视图控制器调用代码

问题描述:

我正在使用一个库来管理视图控制器之间的刷新。swift - 从另一个视图控制器调用代码

好像,我可以用我的视图控制器的一个按钮,浏览其他的唯一途径是通过调用从管理刷卡功能视图控制器的具体方法。

有没有办法在不同的视图控制器中调用方法?

谢谢

+0

什么是图书馆? –

+0

EZSwipeController。看起来他们有导航控制器按钮的默认功能,但我只想使用常规按钮。 – Walking

+0

你能否详细说明你到底想要达到什么目的? “来自另一个视图控制器的调用代码”对我来说似乎有点模糊...更多细节会更好 –

在视图控制器之间进行通信的方式很多。在iOS上最常见的模式之一是delegate pattern。一个视图控制器拥有对另一个的引用,并且代表符合protocol。该协议是第一个视图控制器在发生特定事件时可以调用的一组方法。我会尝试设置一个协议,并让你的一个视图控制器成为另一个的代理

+0

感谢您的回复。你能指点我一个资源吗?这听起来有点儿熟悉,但实施似乎很吓人。谢谢 – Walking

+0

我在那里为委托模式和协议添加了两个链接。请参阅本网站上的“授权”部分:http://www.raywenderlich.com/46988/ios-design-patterns –

如果你看看在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类很小,所以你不必为自己的解决方案编写大量的代码。你也可以继续前进,并分解回购并根据你的喜好修改/使用它。

我希望有帮助。如果您还有其他问题或者有什么不清楚的地方,我会随时为您提供帮助。