2016-08-20 136 views
0

功能我有這個視圖控制器功能:updateProgressComplete。但我不能添加值到視圖控制器,其中該功能是在添加值從其他控制器

我的視圖控制器:

import UIKit 

class StepsDetailViewController: UIViewController { 

    var pageIndex: Int! = 0 
    var titleText: String! 
    var stepData: String! 
    var pageControl: PageControl? 
    let screenSize: CGRect = UIScreen.mainScreen().bounds 

    @IBOutlet weak var dateLabel: UILabel! 
    @IBOutlet weak var stepsLabel: UILabel! 

    var g : ShapeView? 

    override func viewDidLoad(){ 
     super.viewDidLoad() 

     self.dateLabel.text = self.titleText 
     self.stepsLabel.text = self.stepData 

     g = ShapeView(origin: CGPoint(x: UIScreen.mainScreen().bounds.width/2, y: UIScreen.mainScreen().bounds.height/2)) 

     self.view.addSubview(g!) 
    } 

    func updateProgressComplete(newValue : CGFloat, view: StepsDetailViewController) { 
     self.dateLabel.text = "hello" <-- this doesn't work 
    } 
} 

,我認爲這是行不通的,因爲updateProgressComplete的來自另一個類:

import UIKit

class PageControl: BasePageViewController, UIPageViewControllerDataSource { 

    var pageViewController: UIPageViewController! 
    var pageTitles: [[String]]! 
    var complete : CGFloat = 0.0; 
    var count = 0 

    override func viewDidLoad(){ 
     super.viewDidLoad() 

     HealthKit().recentSteps() { steps, error in 
      self.pageTitles = steps; 

      self.count = self.pageTitles.count 
      self.count -= 1 

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

      let startVC = self.viewControllerAtIndex(self.count) as StepsDetailViewController 
      let viewControllers = NSArray(object: startVC) 
print(viewControllers) 
      dispatch_async(dispatch_get_main_queue(), { 

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


      }) 

     } 

    } 



    override func percentCompleteDidChange() { 
     if let percentComplete = self.percentComplete { 
      complete = percentComplete 

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

      vc.updateProgressComplete(percentComplete, view: vc) 
     } 
    } 

    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.titleText = self.pageTitles[index][0] 
      vc.stepData = self.pageTitles[index][1] 
      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) 

    } 
} 

我該如何解決這個問題?我認爲它有一些我使用這個:instantiateViewControllerWithIdentifier? updateProgressComplete中的值始終在變化,這就是爲什麼我使用該函數並且不會將其作爲變量傳遞的原因。

回答

0

你說得對,instantiateViewControllerWithIdentifier是個問題。如果創建一個新的對象。 (與您想要更新的不同,則爲「新」)。但是,您創建PageControl,請嘗試爲其定義代理並將StepsDetailViewController設置爲委託,以便您擁有更新的正確對象。