2016-06-14 38 views
1

我已經創建了一個包含一個視圖控制器:UISegmentedControl編程

  • UISegmentedControl
  • 集裝箱

Image1

我想,當我從另一種觀點來以編程方式更改選擇。 我試着用:

if let previousSelection = NSUserDefaults.standardUserDefaults().stringForKey("SEGMENT_CONTROL") { 
     segmentSaved = Int(previousSelection)! 
    } 

    if (segmentSaved == 0) { 
     mySegmentControl.selectedSegmentIndex = segmentSaved 
    } else if (segmentSaved == 1) { 
     mySegmentControl.selectedSegmentIndex = segmentSaved 
    } else if (segmentSaved == 2) { 
     mySegmentControl.selectedSegmentIndex = segmentSaved 
    } else { 
     print("Error") 
    } 

它需要從內存中一個int,並用它作爲UISegmentedControl的指數。它可以工作,但不會更改容器中的視圖。

我該如何改變容器?

這是它如何工作的:

let viewControllerIdentifiers = ["ViewController1", "ViewController2", "ViewController3"] 

@IBAction func segmentController(sender: UISegmentedControl) { 

    let newController = (storyboard?.instantiateViewControllerWithIdentifier(viewControllerIdentifiers[sender.selectedSegmentIndex]))! as UIViewController 
    let oldController = childViewControllers.last! as UIViewController 

    oldController.willMoveToParentViewController(nil) 
    addChildViewController(newController) 
    newController.view.frame = oldController.view.frame 

    transitionFromViewController(oldController, toViewController: newController, duration: 0.25, options: .TransitionCrossDissolve, animations:{() -> Void in 
     }, completion: { (finished) -> Void in 
      oldController.removeFromParentViewController() 
      newController.didMoveToParentViewController(self) 

    }) 


} 
+1

'segmentController'不是行爲方法的好名字,因爲它聽起來像是一個屬性。改用「segmentChangedAction」之類的東西。考慮在整個代碼中對所有操作方法使用類似「Action」的後綴。 –

+0

@意義事項感謝您的意見,我會改變 – Jigen

回答

2

只要打電話功能self.segmentController(mySegmentControl)更改選定索引之後。

+0

謝謝,你是最好的! – Jigen