Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何关闭当前视图控制器和parentviewcontroller?_Ios_Swift - Fatal编程技术网

Ios 如何关闭当前视图控制器和parentviewcontroller?

Ios 如何关闭当前视图控制器和parentviewcontroller?,ios,swift,Ios,Swift,我正在演示两个视图控制器,如下所示 self.presentViewController(choosePlace, animated: true, completion: nil) self.presentViewController(shareController, animated: true, completion: nil) 我想这样把他们两个都打发掉: println("parent \(self.parentViewController)") self.di

我正在演示两个视图控制器,如下所示

self.presentViewController(choosePlace, animated: true, completion: nil)
self.presentViewController(shareController, animated: true, completion: nil)
我想这样把他们两个都打发掉:

println("parent \(self.parentViewController)")
            self.dismissViewControllerAnimated(true, completion: {

            self.parentViewController?.dismissViewControllerAnimated(true, completion: nil)
            })
self.parentViewController始终为零。我怎样才能同时解雇两名员工?

您可以:

self.dismissViewControllerAnimated(true, completion: { 
    self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
})
因此,请确保按顺序显示视图控制器:

parentViewController->choosePlace->shareController


(箭头表示“self.presentViewController”)

如果Michael Voline的解决方案不起作用,请尝试以下代码

let customViewController = self.presentingViewController as? CustomViewController

self.dismiss(animated: true) {

   customViewController?.dismiss(animated: true, completion: nil)

}

您可以在视图控制器的“ViewWillEnglishe”功能期间引用当前视图控制器(即ShareController在离开作用域之前解除choosePlace)


Swift 4

在尝试迈克尔·沃林的答案时,我遇到了一些问题

作为对答案的评论,它对我不起作用。这是因为
presentingViewController
为零。 因此,我们需要在另一个属性中设置,例如
presentingController
,但如果在
viewDidLoad

private var presentingController: UIViewController?
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    presentingController = presentingViewController
}
然后


我将动画设置为false,这样用户就不会在解散的几秒钟内看到显示视图控制器的UI。

您是否尝试过使用
self.parentViewController?.dismissViewControllerAnimated(true,completion:nil)
?我希望从父视图中删除显示的viewController,这反过来会删除此后显示的每个视图控制器。或者打印时,parentViewController是否已为零?是的,问题是parentViewController出于某种原因似乎为零。。我应该在创建视图控制器时分配父视图吗?现在,这应该自动完成。。。如果一个接一个地显示两个ViewController,我不确定会发生什么情况-视图层次会发生什么情况如果您取消视图控制器,然后该变量会被释放。创建一个指向它的指针,然后从该指针中删除父对象。@Scott Its仍然打印出nil,尽管在第一个dismissviewcontrollerdoesn之前调用它是无效的。在应用程序可以获得presenting view controller(父视图控制器)之前,引用已经为零。引用presentingViewController在ViewDidEnglish中工作吗?此外,如果有特殊情况,您不希望执行ViewDidEnglish或ViewWillEnglish中的代码,在苦苦挣扎了几个小时后,你可以使用if语句。我发现了这一点,挽救了我的一天,非常感谢
private var presentingController: UIViewController?
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    presentingController = presentingViewController
}
    dismiss(animated: false, completion: {
         self.presentingController?.dismiss(animated: false)
    })