gpt4 book ai didi

ios - 从 pageViewController 执行 segue

转载 作者:行者123 更新时间:2023-11-28 08:18:19 25 4
gpt4 key购买 nike

我的问题如下:我正在使用 pageViewControllers 为我正在创建的应用程序创建教程/入职页面。在我的教程的最后(第 3)页上向左滑动手势应该执行 segue。

这是我目前所拥有的,但它给我一个键值编码合规性错误。我对我的 socket 进行了两次、三次检查,swipeView 连接非常正确。

class GrowController: UIViewController {

@IBOutlet weak var swipeView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

view.addSubview(swipeView)
createGesture()

}

func createGesture() {
let showReg = UISwipeGestureRecognizer(target: self, action: #selector(showRegister))
showReg.direction = .left
self.swipeView.addGestureRecognizer(showReg)
}

func showRegister(gesture: UISwipeGestureRecognizer) {
performSegue(withIdentifier: "showRegister", sender: self)
}
}

这是实际 UIViewController 的 Controller (正在显示的特定页面)

现在我也尝试在我的 TutorialViewController 中搞乱一些逻辑,这是 UIPageViewController 控制从页面到页面的滑动等。

逻辑在这里

class TutorialViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {

var viewControllerIndex: Int?

//Array of my pages to load (GrowController is page3)
lazy var tutorialArray: [UIViewController] = {
return [self.tutorialInstance(name: "page1"), self.tutorialInstance(name: "page2"), self.tutorialInstance(name: "page3")]
}()

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

override func viewDidLoad() {
super.viewDidLoad()

self.dataSource = self
self.delegate = self

if let firstViewController = tutorialArray.first {
setViewControllers([firstViewController], direction: .forward, animated: false, completion: nil)
}
}

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


// Page View Controller delegate functions
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = tutorialArray.index(of: viewController) else {
return nil
}

let previousIndex = viewControllerIndex - 1

guard previousIndex >= 0 else {
return nil
}

guard tutorialArray.count > previousIndex else {
// Added this line just testing around, nothing happened here though.
performSegue(withIdentifier: "ShowRegister", sender: self)
return nil
}

return tutorialArray[previousIndex]
}


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

let nextIndex = viewControllerIndex + 1

guard nextIndex < tutorialArray.count else {
return nil
}

guard tutorialArray.count > nextIndex else {
return nil
}

return tutorialArray[nextIndex]
}

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

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


}

是否与 willTransitionTo pageView 委托(delegate)方法有关?我不熟悉如何实现它,我已经尝试过了。

我认为我可以向 Grow Controller 添加一个 subview ,在其中放置一个滑动手势,并在用户从该页面向左滑动时执行 segue。截至目前,此代码会在加载 page3 (GrowController)

时使应用程序崩溃

非常感谢任何帮助,我已经尝试解决这个问题一个多星期了,这是关于我提出的主题的第二个问题。谢谢!

enter image description here

最佳答案

不要为此使用 UIPageViewController。这非常讽刺,因为我通常是第一个建议使用 UIPageViewController 的人。但在这种情况下,它为您完成了太多工作,您不能以按照您描述的方式自定义它的方式进行干预。您将需要使用简单的分页 UIScrollView;这样一来,您将完全负责发生的事情,并通过 ScrollView 的委托(delegate)进行细粒度的响应,并且您将可以访问底层的平移手势识别器并可以修改其行为。

关于ios - 从 pageViewController 执行 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41965954/

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