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

swift-从另一个视图控制器调用代码,swift,methods,Swift,Methods,我正在使用一个库来管理视图控制器之间的滑动 似乎我可以使用其中一个视图控制器中的按钮导航到另一个视图控制器的唯一方法是从管理滑动功能的视图控制器调用特定方法 有没有办法在不同的视图控制器中调用方法 谢谢视图控制器之间有许多通信方式。在iOS上这样做最常见的模式之一是。一个视图控制器保存对另一个视图控制器的引用,委托符合一个视图控制器。协议是第一个视图控制器在特定事件发生时可以调用的一组方法。我会尝试设置一个协议,让您的一个视图控制器成为另一个视图控制器的代理视图控制器之间有许多通信方式。在iOS

我正在使用一个库来管理视图控制器之间的滑动

似乎我可以使用其中一个视图控制器中的按钮导航到另一个视图控制器的唯一方法是从管理滑动功能的视图控制器调用特定方法

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


谢谢

视图控制器之间有许多通信方式。在iOS上这样做最常见的模式之一是。一个视图控制器保存对另一个视图控制器的引用,委托符合一个视图控制器。协议是第一个视图控制器在特定事件发生时可以调用的一组方法。我会尝试设置一个协议,让您的一个视图控制器成为另一个视图控制器的代理

视图控制器之间有许多通信方式。在iOS上这样做最常见的模式之一是。一个视图控制器保存对另一个视图控制器的引用,委托符合一个视图控制器。协议是第一个视图控制器在特定事件发生时可以调用的一组方法。我会尝试设置一个协议,让您的一个视图控制器成为另一个视图控制器的委托

如果查看托管在上的代码,您可以看到页面控制器是从
EZSwipeController
类中公开的。因此,如果您将
EZSwipeController
子类化(或在某处维护引用),现在就可以访问它的
pageViewController
属性并滚动到给定页面

如果您选择子类:

class MyVC : EZSwipeController{
   func buttonTapped(){ /* use self.pageViewController to "page" */ }
}
奇怪的是,我从未亲自使用过
UIPageViewController
,据我所知,没有一种简单的方式可以轻松地滚动到页面

我个人还没有尝试过(我通常在发帖前验证我的答案),但你应该能够成功。如果没有对视图控制器的引用,则需要获取它(如果这是核心问题,请告诉我)

关于
UIPageViewController
paging,有一个问题似乎颇受欢迎:

和来自:

我还鼓励您查看
EZSwipeController
repo中的代码,在这里您可以找到一个执行滚动的非公开方法:

@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
类非常小,因此您不需要为自己的解决方案编写太多代码。你也可以继续进行回购,并根据自己的喜好修改/使用它


我希望这有帮助。如果你有任何进一步的问题,或者有什么不清楚的地方,我愿意帮助你

如果查看托管在上的代码,可以看到页面控制器是从
EZSwipeController
类中公开的。因此,如果您将
EZSwipeController
子类化(或在某处维护引用),现在就可以访问它的
pageViewController
属性并滚动到给定页面

如果您选择子类:

class MyVC : EZSwipeController{
   func buttonTapped(){ /* use self.pageViewController to "page" */ }
}
奇怪的是,我从未亲自使用过
UIPageViewController
,据我所知,没有一种简单的方式可以轻松地滚动到页面

我个人还没有尝试过(我通常在发帖前验证我的答案),但你应该能够成功。如果没有对视图控制器的引用,则需要获取它(如果这是核心问题,请告诉我)

关于
UIPageViewController
paging,有一个问题似乎颇受欢迎:

和来自:

我还鼓励您查看
EZSwipeController
repo中的代码,在这里您可以找到一个执行滚动的非公开方法:

@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
类非常小,因此您不需要为自己的解决方案编写太多代码。你也可以继续进行回购,并根据自己的喜好修改/使用它


我希望这有帮助。如果你有任何进一步的问题,或者有什么不清楚的地方,我愿意帮助你

图书馆是什么?EZSwipeController。它们似乎有导航控制器按钮的默认功能,但我只想使用一个常规按钮。你能详细说明一下你到底想实现什么吗?“从另一个视图控制器调用代码”对我来说似乎有点模棱两可。。。更详细的是,库swift文件中有一段代码将导航到左视图控制器或右视图控制器。我希望如果从我的主要