Der andere Ansatz besteht darin, nur einen Kind-Controller gleichzeitig im Speicher zu haben, und dann nach dem Ändern des ausgewählten Werts im segmentierten Steuerelement den neuen Kind-View-Controller zu laden und zwischen einem Kind-View-Controller zum nächsten zu wechseln. und dann die alten Kind-view-Controller entfernen:
let viewControllerIdentifiers = ["first", "second"] // storyboard identifiers for the child view controllers
@IBAction func didChangeValue(sender: UISegmentedControl) {
let newController = storyboard!.instantiateViewController(withIdentifier: viewControllerIdentifiers[sender.selectedSegmentIndex])
let oldController = childViewControllers.last!
oldController.willMove(toParentViewController: nil)
addChildViewController(newController)
newController.view.frame = oldController.view.frame
transition(from: oldController, to: newController, duration: 0.25, options: .transitionCrossDissolve, animations: {
// nothing needed here
}, completion: { _ -> Void in
oldController.removeFromParentViewController()
newController.didMove(toParentViewController: self)
})
}
Offensichtlich setzt dies voraus, dass Sie bereits die ersten Kind-view-Controller bereits auf der Ansicht bekamen (leicht getan, wenn Sie die „Container Ansicht“ Steuerung im Interface Builder verwenden) und der standardmäßig ausgewählte Wert für die UISegmentedControl
übereinstimmt. Sie müssen auch Storyboard-IDs für diese beiden untergeordneten Szenen haben.
Für Swift 2-Wiedergabe siehe previous revision of this answer.
Sie eigentlich gar nicht sagen, was das Problem ist, Ihren Code zwei Ansichten zeigt – Wain
, was ich will ist, kann ich einen Link zwei View-Controller in der Containeransicht. –
Sehen Sie sich einen Tab-Controller an - er tut "out of the box", obwohl er ein anderes Aussehen hat. – Paulw11