I have a segmentControl with 2 indexes. It is inside a parent view controller. The parent view controller has 2 containerViews that each have an embedded viewController.
parentVC
|
segmentedControll _vcZero
| /
2containerVCs---------
\_vcOne
Inside the viewWillAppear methods of vcZero and vcOne I have some print statements.
The problem is when the parentVC appears on scene and selectedSegmentIndex = 0 shows, it's print statement runs, but the print statement that is inside vcOne also runs too. Considering vcOne isn't on scene it's code shouldn't run.
I understand that when the parentVC loads both containerViews are loaded into memory. I tried these 2 SO answers but neither prevented vcOne's print statements from printing.
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var vcZeroContainer: UIView!
@IBOutlet weak var vcOneContainer: UIView!
let viewControllerIdentifiers = ["vcZeroContainer", "vcOneContainer"]
@IBAction func segmentChanged(sender: UISegmentedControl) {
var 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
// nothing needed here
}, completion: { (finished) -> Void in
oldController.removeFromParentViewController()
newController.didMoveToParentViewController(self)
})
}
and
@IBAction func segmentChanged(sender: UISegmentedControl) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
vcOneContainer?.removeFromSuperview()
vcOneContainer = nil
case 1:
vcZeroContainer?.removeFromSuperview()
vcZeroContainer = nil
default:
break;
}
}
How to I remove vcOneContainer from memory when selectedSegmentIndex = 0 is showing?