如何正确解除显示的ViewController并返回到父ViewController?

时间:2016-02-20 23:41:33

标签: ios swift uiviewcontroller

我面临一个我将要描述的问题,并且发现了一些类似的问题,但我不相信我的问题。

我有一个UITabBarController,其中包含2个VC1和VC2选项卡。 VC1代表VC4。 VC2分段为VC3,VC3分段为VC4。 VC4包含MPMoviePlayerViewController实例,如下所示:

             - - - - - -> VC1 \
TAB BAR VC /                    - - -> VC4
           \                   /
             -> VC2 -> VC3 -> /

我有一个通知,在视频结束时监听,并关闭VC4,然后返回VC VC4呈现的任何一个父VC,即如果VC1呈现VC4,则在解除VC4时,应该返回VC1。同样,如果VC3呈现VC4,那么在解除VC4后,应该返回VC3。

在VC4中:

override func viewDidLoad()
{
    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: "moviePlayerPlayBackDidFinish:",
        name: MPMoviePlayerPlaybackDidFinishNotification,
        object: player?.moviePlayer)
}

func moviePlayerPlayBackDidFinish(notification: NSNotification)
{
    NSNotificationCenter.defaultCenter().removeObserver(
        self,
        name: MPMoviePlayerPlaybackDidFinishNotification,
        object: notification.object
    )

    player!.view.removeFromSuperview()

    self.presentedViewController?.dismissViewControllerAnimated(true, completion: nil)
}

我认为我没有正确使用代码,因为self.presentedViewController?.dismissViewControllerAnimated(true, completion: nil)会留在VC4。

我发现了一些类似的问题:

  1. How to dismiss the current ViewController and go to another View in Swift
  2. How to dismiss VIewController iOS Swift
  3. modal View controllers - how to display and dismiss
  4. 然而,序列segue是不同的,因此我不能遵循这些建议。

    我怎样才能做到这一点?感谢

    更新

    如果从VC1开始,moviePlayerPlayBackDidFinish中的以下代码正确地取消VC4并返回到父VC1 - > VC4:

    self.dismissViewControllerAnimated(true, completion: nil);
    

    然而,VC4从VC3开始时不会被忽略 - > VC4。

1 个答案:

答案 0 :(得分:1)

最后通过在moviePlayerPlayBackDidFinish中添加其他代码解决了我的问题:

self.navigationController?.popViewControllerAnimated(true)

经过大量研究,我从这里找到了解决方案:dismissViewControllerAnimated() does not dismiss view controller