【问题标题】:Swift 4 : Switch Page View Controller programatically [duplicate]Swift 4:以编程方式切换页面视图控制器 [重复]
【发布时间】:2018-02-14 17:31:53
【问题描述】:

我需要使用按钮切换页面视图控制器。 initialViewController 是 CustomPageViewController。

我在视图控制器中试过这个:

class MainViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}    
@IBAction func goProfile(_ sender: Any) {
    CustomPageViewController().goToProfile()
}

这在自定义类 PageViewController 中:

class CustomPageViewController: UIPageViewController {

fileprivate lazy var pages: [UIViewController] = {
    return [
        self.getViewController(withIdentifier: "MainViewController"),
        self.getViewController(withIdentifier: "ProfilViewController")
    ]
}()

fileprivate func getViewController(withIdentifier identifier: String) -> UIViewController
{
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: identifier)
}

override func viewDidLoad()
{
    super.viewDidLoad()
    self.dataSource = self
    self.delegate   = self

    if let firstVC = pages.first
    {
        setViewControllers([firstVC], direction: .forward, animated: true, completion: nil)
    }
}

func goToProfile(){
    setViewControllers([pages.last!], direction: .forward, animated: true, completion: nil)
}

但是什么也没发生,有什么想法吗? 谢谢

编辑:最终 MainViewController 的代码工作

@IBAction func goProfile(_ sender: Any) {
    let vc = UIApplication.shared.keyWindow?.rootViewController as! CustomPageViewController
    vc.goToProfile()
}

【问题讨论】:

  • 您在哪里使用了现有的CustomPageViewController 实例?您正在创建一个新的。
  • CustomPageViewController 是初始的 View Controller,我不创建实例

标签: ios swift uipageviewcontroller


【解决方案1】:

问题是这行写错了:

CustomPageViewController().goToProfile()

表达式CustomPageViewController() 创建了一个新的、独立的自定义页面视图控制器,它永远不会出现在界面中并在下一行中被丢弃。

您需要的是一个 reference 到您界面中的 actual 自定义页面视图控制器。

【讨论】:

  • 好的,谢谢,我该如何做这个参考?
  • 我不知道。您还没有透露视图控制器的视图控制器层次结构。我不知道你的 MainViewController 和你的 CustomPageViewController 之间的关系。只有你知道。我什至不知道,当用户在您的 MainViewController 中时,是否有 一个 CustomPageViewController。但是我给你的原因——还有另外两个人——就是你的代码什么都不做的原因。想想看。了解什么是类和实例。了解引用和实例化之间的区别。
  • 可能想阅读apeth.com/swiftBook/ch04.html#SECinstanceRefs,我会详细讨论您所犯的错误
  • 如果你把它标记为重复 y 回答
  • @Sh_Khan 其实我不明白的是为什么你删除了你的答案,这是非常正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2010-11-08
  • 2017-11-30
相关资源
最近更新 更多