Swift 4:以编程方式切换页面视图控制器
Swift 4 : Switch Page View Controller programatically
我需要使用按钮切换页面视图控制器。
initialViewController 是 CustomPageViewController。
我在视图控制器中试过了:
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func goProfile(_ sender: Any) {
CustomPageViewController().goToProfile()
}
这在自定义 class 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().goToProfile()
表达式CustomPageViewController()
创建了一个新的、独立的自定义页面视图控制器,它从未出现在界面中并在下一行被丢弃。
您需要的是参考您界面中的实际自定义页面视图控制器。
我需要使用按钮切换页面视图控制器。 initialViewController 是 CustomPageViewController。
我在视图控制器中试过了:
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func goProfile(_ sender: Any) {
CustomPageViewController().goToProfile()
}
这在自定义 class 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().goToProfile()
表达式CustomPageViewController()
创建了一个新的、独立的自定义页面视图控制器,它从未出现在界面中并在下一行被丢弃。
您需要的是参考您界面中的实际自定义页面视图控制器。