gpt4 book ai didi

ios - "Hide"ViewController 没有完全关闭它

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:08 28 4
gpt4 key购买 nike

我正在为 iOS 构建一个播放视频的媒体播放器应用。有一个 TableViewController 允许您选择要播放的视频,然后选择一个打开该视频,在另一个 View Controller 中显示该视频,其下方有自定义媒体控件。我可以关闭该视频,并且出于某种原因,该视频一直在后台播放,但我不确定如何在不创建新实例的情况下将其恢复。我会发布代码,但我什至不确定从哪里开始。

提前致谢。

最佳答案

本质上,您想要创建一个 View Controller 并将其存储在某个地方,该位置在您的应用程序执行(或您不再需要它)之前不会被释放。这可以是您的应用程序委托(delegate)、单例或任何最适合您的东西。这样, View Controller 的单个实例就是您每次想要使用它时所获得的。

下面是我将如何实现它:

  1. 我会在应用程序委托(delegate)上创建一个属性来存储我的 View Controller 以供应用程序的整个执行过程使用。像这样,在您的应用委托(delegate) header 中:

    @property (nonatomic, retain) UIViewController *nowPlayingViewController;

(您可能想让它成为您的实际子类,而不是 UIViewController,因为您可能需要将自定义数据等传递给此 View Controller 实例)

  1. 在您的应用委托(delegate)中为该 View Controller 创建自定义 getter,以便在您首次尝试访问您的 View Controller 时自动创建它。在你的
- (UIViewController *)nowPlayingViewController {    if (_nowPlayingViewController == nil) {        // initialize view controller (for a storyboard, you'd do it like so, making sure your storyboard filename and view controller identifier are set properly):        _nowPlayingViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"NowPlaying"];    }    return _nowPlayingViewController;}

Reminder: if your now playing view controller is embedded in a navigation controller, you're going to want to instantiate that. Remember that if you store your navigation controller in this variable, you'll need to get your now playing view controller from it itself (for example, if you're meaning to call methods or set properties on it). If this is true, maybe store the navigation controller and have a convenience method for returning the now playing view controller (topViewController) itself.

  1. 现在,当您想要显示 View Controller 时,以编程方式进行。如果你想以模态方式呈现它,你可以这样做:
MyAppDelegate *delegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;[self presentViewController:delegate.nowPlayingViewController animated:YES completion:nil];
  1. 要关闭,只需像往常一样在 View Controller 上调用 dismissViewControllerAnimated:(如果在导航 Controller 中,则将其弹出,实际上您会这样做)。因为它存储在应用程序 session 期间持续存在的应用程序委托(delegate)中,所以它始终是同一个实例。

  2. 作为奖励,如果您确实想要销毁 View Controller ,可以将委托(delegate)的属性设置为 nil,下次使用它时自动创建。

您的实现可以有所不同,并根据需要进行调整以满足您应用的需求,但这是一个起点。

关于ios - "Hide"ViewController 没有完全关闭它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com