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

时间:2016-08-19 16:39:39

标签: swift

我想从我的视图控制器的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
}

}

这可能吗?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

<强> 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")
    }
    ......
}

答案 1 :(得分:0)

将percentComplete定义为继承自UIPageViewController的自定义类的属性。 然后你可以随处访问它。