我正在使用PageViewController和标签栏。我有一个问题是“如何通过触摸按钮移动另一个视图”。我的应用程序有5个ViewController,它们位于PageViewController上。并且PageViewController在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)
}

....

最佳答案

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

 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)
        }

    }

关于ios - (快速)如何通过触摸按钮在pageviewcontroller中更改 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51019692/

10-13 04:39