JDo*_*Doe 11 xcode containers controller view swift3
我想以编程方式设置/或更改嵌入视图控制器一个内部控制器视图.
我有3个不同的视图控制器,我想在容器视图中显示,这取决于用户是否登录.
我环顾四周并尝试了一堆代码,我找到了一个有效的代码,但代码改变了自我视图,而不是视图容器视图.
我尝试过的很多代码也没有在Swift 3中,所以作为一个新的应用程序开发人员,这非常紧张,因为我试图将其转换为Swift 3.
任何人都可以提供解决方案来更改视图容器中的嵌入式视图控制器吗?谢谢.
JDo*_*Doe 18
我可能已经找到了解决方案.我在这里回答,以防它在我的情况下可以帮助其他人.
我做的是添加一个新的视图控制器,然后将其嵌入到视图容器中 - 这将作为"主视图" - 然后我使用此空白视图控制器来决定应该在空白的自身内更改哪个其他视图控制器.
这是我在空白视图控制器中的一些代码,但我想空白视图控制器也可以用作主视图控制器(在我的情况下用于"帐户"),然后它可以添加登录/注册视图作为一个孩子.
override func viewDidLoad() {
super.viewDidLoad()
updateView()
}
private lazy var loginViewController: loginViewController = {
// Load Storyboard
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
// Instantiate View Controller
var viewController = storyboard.instantiateViewController(withIdentifier: "loginViewController") as! loginViewController
// Add View Controller as Child View Controller
self.add(asChildViewController: viewController)
return viewController
}()
private lazy var registerViewController: registerViewController = {
// Load Storyboard
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
// Instantiate View Controller
var viewController = storyboard.instantiateViewController(withIdentifier: "registerViewController") as! registerViewController
// Add View Controller as Child View Controller
self.add(asChildViewController: viewController)
return viewController
}()
private func add(asChildViewController viewController: UIViewController) {
// Add Child View Controller
addChildViewController(viewController)
// Add Child View as Subview
view.addSubview(viewController.view)
// Configure Child View
viewController.view.frame = view.bounds
viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
// Notify Child View Controller
viewController.didMove(toParentViewController: self)
}
private func remove(asChildViewController viewController: UIViewController) {
// Notify Child View Controller
viewController.willMove(toParentViewController: nil)
// Remove Child View From Superview
viewController.view.removeFromSuperview()
// Notify Child View Controller
viewController.removeFromParentViewController()
}
private func updateView() {
add(asChildViewController: registerViewController)
/*
if segmentedControl.selectedSegmentIndex == 0 {
remove(asChildViewController: sessionsViewController)
add(asChildViewController: summaryViewController)
} else {
remove(asChildViewController: summaryViewController)
add(asChildViewController: sessionsViewController)
}
*/
}
Run Code Online (Sandbox Code Playgroud)
相信这个人:https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/