2016-08-19 50 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 –

相關問題