我面临一个将要描述的问题,并且发现了一些类似的问题,但是我认为这与我的问题无关。

我有一个带有VC1和VC2两个标签的UITabBarController。 VC1锁定到VC4。 VC2选择到VC3,而VC3选择到VC4。 VC4包含一个MPMoviePlayerViewController实例,如下所示:

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

我有一个通知,可以在视频结束时监听并关闭VC4,然后返回到父VC呈现VC4的任何一个,即如果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。

我发现了一些类似的问题:
  • How to dismiss the current ViewController and go to another View in Swift
  • How to dismiss VIewController iOS Swift
  • modal View controllers - how to display and dismiss

  • 但是,序列顺序是不同的,因此我无法遵循建议。

    我该如何实现?谢谢

    更新:

    如果从VC1-> VC4发出,则moviePlayerPlayBackDidFinish中的以下代码可正确关闭VC4并返回到父VC1:
    self.dismissViewControllerAnimated(true, completion: nil);
    

    但是,从VC3-> VC4转到VC4时不会关闭。

    最佳答案

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

    self.navigationController?.popViewControllerAnimated(true)
    

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

    07-24 09:25