gpt4 book ai didi

ios - UIPageViewController 不随 setViewControllers 一起前进

转载 作者:行者123 更新时间:2023-11-30 11:49:26 27 4
gpt4 key购买 nike

我有一个 UIPageViewController,其中有两个 UIViewController 作为子级。我希望用户能够在 subview 之间进行分页,但我也希望能够自动调用页面。

我已经尝试了使用 setViewControllers 的所有排列,但它们都无法在程序控制下推进页面。

我觉得我一定错过了一些基本的东西,但我看不到它。

这是代码。

    import UIKit
import Alamofire
import SwiftyJSON
import SVProgressHUD

class auiPrefsPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

lazy var auiPrefsControllers: [UIViewController] = {
return [self.auiPrefsControllerInstance(name: "auiURLPrefs"), self.auiPrefsControllerInstance(name: "auiCredentialsPrefs")]

}()

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

}

public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = auiPrefsControllers.index(of: viewController) else {
return nil

}

let previousIndex = viewControllerIndex - 1

guard previousIndex >= 0 else {
return nil

}

guard auiPrefsControllers.count > previousIndex else {
return nil
}

return auiPrefsControllers[previousIndex]

}

public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = auiPrefsControllers.index(of: viewController) else {
return nil

}

let nextIndex = viewControllerIndex + 1

guard nextIndex < auiPrefsControllers.count else {
return nil

}

guard auiPrefsControllers.count > nextIndex else {
return nil

}

return auiPrefsControllers[nextIndex]

}

public func presentationCount(for pageViewController: UIPageViewController) -> Int {
return auiPrefsControllers.count

}

public func presentationIndex(for pageViewController: UIPageViewController) -> Int {
guard let firstViewController = viewControllers?.first, let firstViewControllerIndex = auiPrefsControllers.index(of: firstViewController) else {
return 0
}

return firstViewControllerIndex

}

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

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

}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for view in self.view.subviews {
if view is UIScrollView {
view.frame = UIScreen.main.bounds
} else {
view.backgroundColor = UIColor.clear

}

}

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


func auiPrefsGoNext() {
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "auiCredentialsPrefs")
setViewControllers([controller], direction: .forward, animated: true, completion: nil)
}

public func obtainPrimaryURL(mCode: String) {
SVProgressHUD.show()
let rString = "ImaURLthatcantbepublic?aparam=" + mCode

Alamofire.request(rString).responseJSON { response in
if let result = response.result.value {
SVProgressHUD.dismiss()
let json = JSON(result)
if(json["message"] == "ok") {
let mURL: String = json["awhURL"].string!
let mAPI: String = json["apiURL"].string!

// save URLs
let sState = auiCoreDataHandler.saveBaseURL(baseURL: mURL)
if (!sState) {
let sState = auiCoreDataHandler.saveBaseURL(baseURL: "")

}

self.auiPrefsGoNext()

} else {
// handle a return error
SVProgressHUD.dismiss()

// some actual error handling here

}

}

}

}

从这里可以看出,两个重要的部分是函数obtainPrimaryURL和auiPrefsGoNext。第一个出去并获取一些数据并存储它,然后它尝试通过调用 auiPrefsGoNext 前进到下一页。几天来,我一直在绞尽脑汁,尝试一种又一种方法。最重要的是它不会抛出任何错误,但不会前进到下一页。

最佳答案

看起来您已经创建了 auiCredentialsPrefs Controller 一次(在 lazy var 中),为什么要在 中第二次(并且每次)创建它>auiPrefsGoNext

如果这是我的代码,我会这样做:

func auiPrefsGoNext() {
let auiCredentialsPrefsController = auiPrefsControllers[1]
setViewControllers([auiCredentialsPrefsController], direction: .forward,
animated: true, completion: nil)
}

另外,我没有看到在你正在做的地方做一个lazy var有什么好处。

关于ios - UIPageViewController 不随 setViewControllers 一起前进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com