Swift:从不同的视图控制器委托调用segue
我有一个viewcontroller,我从中调用一个popover,在popover中我有一个委托,它在主viewcontroller中调用一个函数 在这个函数中,我关闭popover并希望加载不同的视图控制器 如果我这样做的话,原来的popover的关闭是有效的Swift:从不同的视图控制器委托调用segue,swift,segue,Swift,Segue,我有一个viewcontroller,我从中调用一个popover,在popover中我有一个委托,它在主viewcontroller中调用一个函数 在这个函数中,我关闭popover并希望加载不同的视图控制器 如果我这样做的话,原来的popover的关闭是有效的 func KeypadDismissData(View: UIViewController, Password : String){ View.dismissViewControllerAnimated(true, compl
func KeypadDismissData(View: UIViewController, Password : String){
View.dismissViewControllerAnimated(true, completion: nil)
}
但是,如果我尝试调用segue来加载带有代码的新视图控制器
func KeypadDismissData(View: UIViewController, Password : String){
View.dismissViewControllerAnimated(true, completion: nil)
self.performSegueWithIdentifier("LoginToMain", sender:nil)
}
我得到了错误
Warning: Attempt to present <UIViewController: 0x7fc768488900> on ... whose view is not in the window hierarchy!
你知道我该怎么解决这个问题吗
谢谢我不确定是否了解您的问题,但我可以尝试: 您可以在MainViewController中打开一个popover。要解除此popover,请使用委托,在MainViewController中解除此popover。在弹出框关闭后,您需要切换到另一个视图 我重新创建了它,代码如下所示: 主视图控制器:
protocol DismissDelegate: class {
func dismiss()
}
class ViewController: UIViewController, DismissDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func openButton(sender: UIButton) {
let popoverViewController = storyboard?.instantiateViewControllerWithIdentifier("popoverViewController") as! PopoverViewController
popoverViewController.modalPresentationStyle = .Popover
popoverViewController.delegate = self
popoverViewController.preferredContentSize = CGSize(width: 200, height: 260)
popoverViewController.view.backgroundColor = UIColor.yellowColor()
// Settings for the popover
let popover = popoverViewController.popoverPresentationController!
popover.sourceView = self.view
popover.sourceRect = sender.frame
popover.backgroundColor = UIColor.redColor()
presentViewController(popoverViewController, animated: true, completion: nil)
}
func dismiss() {
dismissViewControllerAnimated(true) {
self.performSegueWithIdentifier("segue", sender: self)
}
}
}
class PopoverViewController: UIViewController {
weak var delegate: DismissDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func dismissButton(sender: UIButton) {
delegate?.dismiss()
}
}
PopOverview控制器:
protocol DismissDelegate: class {
func dismiss()
}
class ViewController: UIViewController, DismissDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func openButton(sender: UIButton) {
let popoverViewController = storyboard?.instantiateViewControllerWithIdentifier("popoverViewController") as! PopoverViewController
popoverViewController.modalPresentationStyle = .Popover
popoverViewController.delegate = self
popoverViewController.preferredContentSize = CGSize(width: 200, height: 260)
popoverViewController.view.backgroundColor = UIColor.yellowColor()
// Settings for the popover
let popover = popoverViewController.popoverPresentationController!
popover.sourceView = self.view
popover.sourceRect = sender.frame
popover.backgroundColor = UIColor.redColor()
presentViewController(popoverViewController, animated: true, completion: nil)
}
func dismiss() {
dismissViewControllerAnimated(true) {
self.performSegueWithIdentifier("segue", sender: self)
}
}
}
class PopoverViewController: UIViewController {
weak var delegate: DismissDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func dismissButton(sender: UIButton) {
delegate?.dismiss()
}
}
不同的是,我已经把segue放在了dismissViewControllerAnimated的末尾