2016-06-14 4 views
1

Я создал ViewController, который содержит: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'. Рассмотрите возможность использования постфикса, такого как «Действие» во всем коде для всех методов действий. –

+0

@ смысл-дела спасибо за совет, я изменю – Jigen

ответ

2

Просто вызвать функцию self.segmentController(mySegmentControl) после изменения выбранного индекса.

+0

Спасибо, ты лучший! – Jigen

 Смежные вопросы

  • Нет связанных вопросов^_^