Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从页面视图控制器创建按钮iAction_Ios_Swift - Fatal编程技术网

Ios 如何从页面视图控制器创建按钮iAction

Ios 如何从页面视图控制器创建按钮iAction,ios,swift,Ios,Swift,当用户首次使用应用程序时,我有一个演练/入职流程。我用一个页面视图控制器来实现这一点。在最后一个屏幕上,我有一个按钮,我只是将其拖动到选项卡栏视图控制器以创建一个序列。但我现在需要一个IBaction来点击按钮。我试着用CTRL键拖动按钮,但我得到的唯一选择是“退出”,而不是一个动作。如何为此按钮创建iAction 以下是页面视图控制器代码 import UIKit class PageViewController: UIPageViewController, UIPageViewContro

当用户首次使用应用程序时,我有一个演练/入职流程。我用一个页面视图控制器来实现这一点。在最后一个屏幕上,我有一个按钮,我只是将其拖动到选项卡栏视图控制器以创建一个序列。但我现在需要一个IBaction来点击按钮。我试着用CTRL键拖动按钮,但我得到的唯一选择是“退出”,而不是一个动作。如何为此按钮创建iAction

以下是页面视图控制器代码

import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {



    var pageControl = UIPageControl()

    // MARK: UIPageViewControllerDataSource

    lazy var orderedViewControllers: [UIViewController] = {
        return [self.newVc(viewController: "sbBlue"),
                self.newVc(viewController: "sbRed"),
                self.newVc(viewController: "sbGreen")]
    }()

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



        // This sets up the first view that will show up on our page control
        if let firstViewController = orderedViewControllers.first {
            setViewControllers([firstViewController],
                               direction: .forward,
                               animated: true,
                               completion: nil)
        }

        configurePageControl()

        // Do any additional setup after loading the view.
    }

    func configurePageControl() {
        // The total number of pages that are available is based on how many available colors we have.
        pageControl = UIPageControl(frame: CGRect(x: 0,y: UIScreen.main.bounds.maxY - 50,width: UIScreen.main.bounds.width,height: 50))
        self.pageControl.numberOfPages = orderedViewControllers.count
        self.pageControl.currentPage = 0
        self.pageControl.tintColor = UIColor.white
        self.pageControl.pageIndicatorTintColor = UIColor.lightGray
        self.pageControl.currentPageIndicatorTintColor = UIColor.white
        self.view.addSubview(pageControl)



    }

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


    // MARK: Delegate methords
    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
        let pageContentViewController = pageViewController.viewControllers![0]
        self.pageControl.currentPage = orderedViewControllers.index(of: pageContentViewController)!
    }

    // MARK: Data source functions.
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
            return nil
        }

        let previousIndex = viewControllerIndex - 1

        // User is on the first view controller and swiped left to loop to
        // the last view controller.
        guard previousIndex >= 0 else {
            //return orderedViewControllers.last
            // Uncommment the line below, remove the line above if you don't want the page control to loop.
            return nil
        }

        guard orderedViewControllers.count > previousIndex else {
            return nil
        }

        return orderedViewControllers[previousIndex]
    }

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

        let nextIndex = viewControllerIndex + 1
        let orderedViewControllersCount = orderedViewControllers.count

        // User is on the last view controller and swiped right to loop to
        // the first view controller.
        guard orderedViewControllersCount != nextIndex else {
            //return orderedViewControllers.first
            // Uncommment the line below, remove the line above if you don't want the page control to loop.
            return nil
        }

        guard orderedViewControllersCount > nextIndex else {
            return nil
        }

        return orderedViewControllers[nextIndex]


    }
}

确保序列图像板中的页面视图控制器已连接到相应的控制器文件


由于您只想在用户默认设置中设置一个值,显示用户已“看到第三个屏幕”,因此您可以:

  • 在第三个VC的
    viewDidLoad()
    中设置值
  • 在第三个VC中的'prepareForSegue'中设置值
  • 在选项卡ViewController的第一个选项卡的VC的
    viewDidLoad()
    中设置值

从您的评论来看,您似乎选择了选项“A”

谢谢。但是,在这样做之后,我再也没有用按钮进入第三个屏幕。它只是循环通过前2个,循环那些,永远不会到达第3个?“我有一个按钮,我只是拖到一个选项卡栏视图控制器”。。。您的意思是页面视图控制器中显示的最后一个VC是
UITabBarController
?因此,此时用户可以在页面中切换选项卡?@DonMag,入口点是一个具有3个演练屏幕的页面视图控制器。在第三个屏幕上,我有一个按钮。我按住CTRL键将该按钮拖动到一个选项卡视图控制器上,该控制器基本上就是主屏幕。这只是一个片段。如果不是第一次打开应用程序,则应默认为选项卡视图控制器。我需要在第三个walktrhough屏幕上点击iAction按钮来创建用户默认值,这样应用程序就知道不再显示漫游屏幕。您可以在第三个walkthrough屏幕(其视图控制器)中创建/附加iAction,或者,可能是更好的选项,在第三个VC中实现
prepareforsgue
,并在那里设置您的用户默认值。@DonMag,这就是问题所在。如果我将第三个VC链接到页面视图控制器类,则第三个VC永远不会出现,它只循环通过前两个。因此,我不能这样做,因此我也不能实现prepareForSegue?3 VC的默认类是UIViewController