Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
如何从视图控制器swift中的扩展中检索值_Swift - Fatal编程技术网

如何从视图控制器swift中的扩展中检索值

如何从视图控制器swift中的扩展中检索值,swift,Swift,我想从视图控制器上的scrollViewDidScroll函数中检索该值。它在控制台中返回正确的值,这很好 我的视图控制器: import UIKit extension UIPageViewController: UIScrollViewDelegate { public override func viewDidLoad() { super.viewDidLoad() for subView in view.subviews {

我想从视图控制器上的scrollViewDidScroll函数中检索该值。它在控制台中返回正确的值,这很好

我的视图控制器:

import UIKit

extension UIPageViewController: UIScrollViewDelegate {
    public override func viewDidLoad() {
        super.viewDidLoad()
        for subView in view.subviews {
            if subView is UIScrollView {
                (subView as! UIScrollView).delegate = self
            }
        }
    }

    public func scrollViewDidScroll(scrollView: UIScrollView) {
        let point = scrollView.contentOffset
        var percentComplete: CGFloat
        percentComplete = fabs(point.x - view.frame.size.width)/view.frame.size.width
        print("percentComplete: ", percentComplete)


    }

}

class StepsDetailViewController: UIViewController {

      var pageIndex: Int!

    override func viewDidLoad()
    {
        super.viewDidLoad()

    }

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

}
视图控制器的来源:

import UIKit

class PageControl: UIPageViewController, UIPageViewControllerDataSource {

var pageViewController: UIPageViewController!
var pageTitles: [[String]]!

override func viewDidLoad(){
    super.viewDidLoad()

    testC().getRecent() { result, error in
        self.pageTitles = result;

        self.pageViewController = self
        self.pageViewController.dataSource = self

        let startVC = self.viewControllerAtIndex(0) as StepsDetailViewController

        dispatch_async(dispatch_get_main_queue(), {

        let viewControllers = NSArray(object: startVC)


        self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: .Forward, animated: true, completion: nil)

        })
    }

}

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



func viewControllerAtIndex(index: Int) -> StepsDetailViewController
{
    if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) {
        return StepsDetailViewController()
    }

    let vc: StepsDetailViewController = self.storyboard?.instantiateViewControllerWithIdentifier("StepsDetailViewController") as! StepsDetailViewController


        vc.pageIndex = index

    return vc
}


// MARK: - Page View Controller Data Source

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{

    let vc = viewController as! StepsDetailViewController
    var index = vc.pageIndex as Int


    if (index == 0 || index == NSNotFound)
    {
        return nil

    }

    index -= 1
    return self.viewControllerAtIndex(index)
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    let vc = viewController as! StepsDetailViewController
    var index = vc.pageIndex as Int

    if (index == NSNotFound)
    {
        return nil
    }

    index += 1

    if (index == self.pageTitles.count)
    {
        return nil
    }

    return self.viewControllerAtIndex(index)

}

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int
{
    return self.pageTitles.count
}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int
{
    return 0
}

}

这可能吗

将percentComplete定义为从UIPageViewController继承的自定义类的属性。
然后您可以在任何地方访问它。

您可以这样做:

1。用自定义的
UIPageViewController

class BasePageViewController: UIPageViewController, UIScrollViewDelegate {

    var percentComplete: CGFloat = 0.0 {
        didSet { self.percentCompleteDidChange() }
    }

    func percentCompleteDidChange() {
        print("percentCompleteDidChange")
    }

    public override func viewDidLoad() {
        super.viewDidLoad()
        for subView in view.subviews {
            if subView is UIScrollView {
                (subView as! UIScrollView).delegate = self
            }
        }
    }

    public func scrollViewDidScroll(scrollView: UIScrollView) {
        let point = scrollView.contentOffset
        self.percentComplete = fabs(point.x - view.frame.size.width)/view.frame.size.width
        print("percentComplete: ", percentComplete)
    }
}
2。PageControl是BasePageViewController子类

class PageControl: BasePageViewController, UIPageViewControllerDataSource {
    // here you have the access to percentComplete of superclass
    func printPercentComplete() {
        if let percentComplete = self.percentComplete {
            print(percentComplete)
        }
    }

    override func percentCompleteDidChange() {
        print("percentCompleteDidChange from child")
    }
    ......
}

测试是否有UIPageViewController的实例?@MarcoSantarossa是的,我想是的,我在调用视图控制器的地方添加了代码。这就是我迷路的地方:(,我想访问我的视图控制器上的值。'class CustomPageViewController:UIPageViewController{var percentComplete}'在"自定义"页面"视图"控制器的"测试对象实例"中。percentComplete@da1lbi3我更新了答案,让我知道它是否清晰。它稍微清晰一点,但我如何在我的视图控制器本身获取该值?@da1lbi3我用一个函数更新了该函数,以显示如何读取属性。但是,我如何在我的视图控制器获取该“更改”值呃,取而代之的是PageControl?@da1lbi3我添加了一个func percentCompleteDidChange,以便在值更改时给您回叫,如果它对您有效,请告诉我