我面临一个我将要描述的问题,并且发现了一些类似的问题,但我不相信我的问题。
我有一个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。
我发现了一些类似的问题:
然而,序列segue是不同的,因此我不能遵循这些建议。
我怎样才能做到这一点?感谢
更新
如果从VC1开始,moviePlayerPlayBackDidFinish
中的以下代码正确地取消VC4并返回到父VC1 - > VC4:
self.dismissViewControllerAnimated(true, completion: nil);
然而,VC4从VC3开始时不会被忽略 - > VC4。
答案 0 :(得分:1)
最后通过在moviePlayerPlayBackDidFinish
中添加其他代码解决了我的问题:
self.navigationController?.popViewControllerAnimated(true)
经过大量研究,我从这里找到了解决方案:dismissViewControllerAnimated() does not dismiss view controller