【发布时间】:2017-08-03 07:16:20
【问题描述】:
我有两个视图控制器:ViewControllerA 和 ViewControllerB。 ViewControllerA 被添加到容器视图中并且它有按钮。在点击按钮时,ViewControllerB 应替换 ViewControllerA。我怎样才能做到这一点?问题是按钮位于ViewControllerB 内,而不是主视图控制器中。
主要ViewController:
class ViewController: UIViewController {
@IBOutlet weak var containerView: UIView!
weak var currentViewController: UIViewController?
override func viewDidLoad() {
self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "Verify")
self.currentViewController!.view.translatesAutoresizingMaskIntoConstraints = false
self.addChildViewController(self.currentViewController!)
self.initializeFirstScreen(subView: self.currentViewController!.view, toView: self.containerView)
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func initializeFirstScreen(subView:UIView, toView parentView:UIView){
parentView.addSubview(subView)
var viewBindingDict = [String: AnyObject]()
viewBindingDict["subView"] = subView
parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[subView]|", options: [], metrics: nil, views: viewBindingDict))
parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[subView]|", options: [], metrics: nil, views: viewBindingDict))
}
func switchToValidate(){
let newViewController = self.storyboard?.instantiateViewController(withIdentifier: "Validate")
//this line throws error
//fatal error: unexpectedly found nil while unwrapping an Optional value
newViewController!.view.translatesAutoresizingMaskIntoConstraints = false
self.addChildViewController(newViewController!)
initializeFirstScreen(subView: (newViewController?.view)!, toView: self.containerView)
}
}
ViewControllerA:
class VerifyViewController: UIViewController {
let mainViewController = ViewController()
@IBAction func VerifyNumber(){
self.switchScreens()
}
func switchScreens(){
mainViewController.switchToValidate()
}
}
switchToValidate 抛出以下错误:
致命错误:在展开可选值时意外发现 nil
【问题讨论】:
-
我们需要一些代码来帮助你
-
试试这个并告诉我。 self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "Verify") as!验证视图控制器 self.currentViewController.mainViewController = self
-
这部分不清楚 self.currentViewController.mainViewController = self currentViewController 没有mainViewController
-
将我在评论中给出的代码行添加到 ViewController 类的 viewDidLoad 中。
标签: ios swift uiviewcontroller