Я создал ViewController, который содержит:UISegmentedControl программно
- UISegmentedControl
- Контейнер
Я пытаюсь изменить выбор программно, когда я приезжаю с другой точки зрения , Я попытался с:
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)
})
}
'segmentController' не является хорошим именем для действия, потому что это похоже на свойство. Вместо этого используйте что-то вроде 'segmentChangedAction'. Рассмотрите возможность использования постфикса, такого как «Действие» во всем коде для всех методов действий. –
@ смысл-дела спасибо за совет, я изменю – Jigen