簡體   English   中英

如何正確解散呈現的ViewController並返回到父ViewController?

[英]How to properly dismiss the presented ViewController and go back to the parent ViewController?

我面臨一個將要描述的問題,並且發現了一些類似的問題,但是我認為這與我的問題無關。

我有一個帶有2個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。

我發現了一些類似的問題:

  1. 如何關閉當前的ViewController並轉到Swift中的另一個視圖
  2. 如何關閉VIewController iOS Swift
  3. 模態視圖控制器-如何顯示和關閉

但是,序列順序是不同的,因此我無法遵循建議。

我該如何實現? 謝謝

更新:

如果從moviePlayerPlayBackDidFinish > VC4 moviePlayerPlayBackDidFinishmoviePlayerPlayBackDidFinish的以下代碼moviePlayerPlayBackDidFinish正確關閉VC4並返回到父VC1:

self.dismissViewControllerAnimated(true, completion: nil);

但是,從VC3-> VC4轉到VC4時不會關閉。

最后通過在moviePlayerPlayBackDidFinish添加其他代碼解決了我的問題:

self.navigationController?.popViewControllerAnimated(true)

經過大量研究,我從這里找到了解決方案: dismissViewControllerAnimated()不會關閉視圖控制器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM