2016-08-19 45 views
1

我想从视图控制器的scrollViewDidScroll函数中检索值。它给控制台带来了正确的价值,所以很好。如何从视图控制器中的扩展名中检索值swift

我的视图控制器:

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 
} 

} 

这可能吗?

+0

确实有测试UIPageViewController的一个实例? –

+0

@MarcoSantarossa是的,我认为是的,我已经添加了视图控制器被调用的代码。 – da1lbi3

回答

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

@ da1lbi3我更新回答,让我知道如果它更清晰 –

+0

这是一个更清晰的,但我怎么可以在我的视图控制器本身访问该值? – da1lbi3

+0

@ da1lbi3我更新了一个函数,告诉你如何读取属性 –

0

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

+0

这是我迷路的地方.. :(,我想在我的视图控制器访问值btw。 – da1lbi3

+0

'类CustomPageViewController:UIPageViewController {var percentComplete}'在测试对象_instance_of_custom_page_view_controller_.percentComplete –

相关问题