(Swift) 如何使用触摸按钮更改 pageviewcontroller 中的视图

Posted

技术标签:

【中文标题】(Swift) 如何使用触摸按钮更改 pageviewcontroller 中的视图【英文标题】:(Swift) how can I change view in pageviewcontroller with touching button 【发布时间】:2018-06-25 08:59:50 【问题描述】:

我正在使用PageViewController 和标签栏。我有一个问题是“如何通过触摸按钮移动另一个视图”。我的应用有 5 个 ViewController,它们位于 PageViewControllerPageViewController 在 ViewController 上。该 ViewController 是 MainController。所以我用大约 4:1(PageViewController:标签栏)分隔主视图。所以标签栏在 MainController 上,当标签项被触摸时,MainController 可以改变 ViewController。

但我想做的是五个 ViewController 之一上的一个按钮,它可以更改 ViewController。

按钮无权更改 ViewController。所以我搜索了如何解决这个问题,但找不到好的解决方案。

我觉得解法很短,大概1~2句话。

我附上了我的代码,所以我希望任何知道如何解决这个问题的人都可以帮助我。

我是 Swift 新手,请详细说明

这是 MainController 的一部分

import UIKit

class ViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate 

var pageViewController: UIPageViewController!
var subVC: [UIViewController] = []
var viewIndex: Int = 0 
var tabIndicator1 = UIView()
var tabIndicator2 = UIView()
var tabIndicator3 = UIView()
var tabIndicator4 = UIView()
var tabIndicator5 = UIView()

var views = [UIView]()

override func viewDidLoad() 
    super.viewDidLoad()

    createVC() // make five ViewControllers

    self.pageViewController = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController
    self.pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
    self.pageViewController.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)

    self.addChildViewController(self.pageViewController)
    self.view.addSubview(self.pageViewController.view)

    let startVC = subVC[0]
    viewIndex = 0
    let viewControllers = NSArray(object: startVC)

    self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: .forward, animated: true, completion: nil)
    self.pageViewController.didMove(toParentViewController: self)

    createTabBar() // make Tab Bar
    createIndicator() // make Tab Indicator

    self.pageViewController.dataSource = self
    self.pageViewController.delegate = self



...

func createVC()  // I have five ViewController files

    let HomeVC = VCInstance(name: "Home")
    let AccessVC = VCInstance(name: "AccessLog")
    let RegisterVC = VCInstance(name: "Register")
    let SettingVC = VCInstance(name: "Setting")
    let HelpVC = VCInstance(name: "Help")

    subVC = [HomeVC, AccessVC, RegisterVC, SettingVC, HelpVC]



func VCInstance(name: String) -> UIViewController 
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name)


....

【问题讨论】:

***.com/a/45095847/5461400 How to jump to a particular page with UIPageViewController?的可能重复 @HarshalValanda 感谢您的评论。但是这样你注意到的已经使用了我的代码。这适用于 ViewController(MainController),但不适用于五个 ViewController(例如:HomeVC 或 AccessVC)。我想知道如何通过触摸按钮将 HomeVC 上的 ViewController 更改为 HomeVC 中的 AccessVC。所以我不认为它是重复的。 【参考方案1】:

您可以使用此代码,它可能会对您有所帮助。

 extension UIViewController 

        func goNextPage(animated: Bool = true) 
            guard let currentViewController = self.viewControllers?.first else  return 
            guard let nextViewController = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) else  return 
            setViewControllers([nextViewController], direction: .forward, animated: animated, completion: nil)
        

        func goPreviousPage(animated: Bool = true) 
            guard let currentViewController = self.viewControllers?.first else  return 
            guard let previousViewController = dataSource?.pageViewController(self, viewControllerBefore: currentViewController) else  return 
            setViewControllers([previousViewController], direction: .reverse, animated: animated, completion: nil)
        

    

【讨论】:

感谢您的评论。但我无法理解您的评论......我知道“扩展名”应该与班级分开写下。所以我收到了类似“'UIViewController' 类型的值没有成员'viewControllers'和'使用未解析的标识符'dataSource'和'setViewControllers'这样的错误消息。

以上是关于(Swift) 如何使用触摸按钮更改 pageviewcontroller 中的视图的主要内容,如果未能解决你的问题,请参考以下文章

Swift 5. 如何在按钮触摸时呈现或显示 ViewController?没有情节提要(以编程方式)

触摸另一个控件(如按钮)Swift 2.0时如何隐藏键盘

如何在 Swift 中将触摸事件发送到 nextResponder

触摸按钮时如何更改 UIButton 图像

如何防止 UILabel 在 Swift 中阻止对父 UIButton 的触摸?

如何在不触摸的情况下更改按钮的图像