1

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.

link

@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

link

@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?

Lance Samaria
  • 17,576
  • 18
  • 108
  • 256

0 Answers0