【问题标题】:Present View Controller without calling presentViewController (or dismissViewController)在不调用 presentViewController(或dismissViewController)的情况下呈现视图控制器
【发布时间】:2013-12-07 08:24:58
【问题描述】:

我正在构建一个可以在 iOS7+ 上运行的相当复杂的 iPad 应用程序。该应用程序有一个登录屏幕,必须在每个用户会话中访问一次,这是我故事板中的起始视图控制器。用户可以通过触摸一个在所有其他 ViewController 中始终可用的按钮,从应用程序中的任何其他屏幕(大约有 60 个其他屏幕)注销。当用户注销时,应使用自定义过渡动画。

似乎我可以通过以下两种方式之一来实现这一点,要么从应用程序中的每个屏幕到登录页面,这使得故事板无法阅读,要么呈现 ViewController。

我已经用 presentViewController 实现了这一点,通过 id 从情节提要中查找视图控制器(这会创建一个新实例,这是所需的行为),然后从当前视图控制器中呈现它。

毫不奇怪,这并没有关闭原始的登录视图控制器,而是创建了一个视图控制器堆栈,最终我的内存耗尽,因为每次用户注销时,都会创建并保留一个新的登录视图控制器。

有没有办法清除视图控制器的“堆栈”?

是否有不同的方式来呈现视图控制器,带有动画,不涉及 presentViewController 或 segues?我考虑过包含视图控制器,但与情节提要一起使用时似乎不太正确。

【问题讨论】:

    标签: objective-c uiviewcontroller ios7 uistoryboard segue


    【解决方案1】:

    您是否考虑过更换根视图控制器?如果应用委托观察到注销通知并将根视图控制器替换为故事板的初始内容,这应该使应用返回初始屏幕。

    我已经在网络上的其他地方看到了它作为登录/注销问题的解决方案,但我不确定是否可以在那里制作动画。

    【讨论】:

    • 我实际上能够在 presentViewController 的完成块中做到这一点。我之前尝试过这个,但事实证明我在其他地方有一个保留周期,这阻止了我以前的视图控制器被释放。我错误地认为保留来自我正在呈现的视图控制器中的 presentingViewController 指针。
    【解决方案2】:

    我认为你的方法是错误的。 请明智地纠正我

    登录机制应该是单例实例。因此,您应该将视图控制器、模型、视图都定义为单例实例。例如,请看我下面的代码。

    static id objectInstance;
    
    + (id) sharedInstanceID {
        if (!objectInstance) {
            objectInstance = [[YourClass alloc] init];
        }
        return objectInstance;
    }
    

    如果这对你有帮助,请告诉我。

    【讨论】:

    • 我正在使用情节提要,因此每个视图控制器都由情节提要实例化(同样解除分配)。我的应用程序本质上可能有点占用内存,所以我不希望在内存中放置很多额外的视图控制器。基本上,在注销时,我希望它忘记它曾经知道的一切,以便我可以重新开始。
    • 我认为您的问题是针对编程的更高级别(抽象与您的应用程序架构)。你能分享你的应用程序的架构吗?你使用导航控制器吗,如果是,你可以直接调用self.navigationController popToRootViewController 左右。否则,我确定您正在使用一些堆栈或队列来维护所有控制器,并且您可以再次释放它们。我需要更多信息来帮助您。
    • 没有导航控制器。该应用程序用于业务,作为信息亭,每个用户登录,完成任务,然后注销。任务可能很长且涉及多个屏幕,并且可以通过注销随时退出。当用户注销时,所有状态都被清除。本质上,我想执行自定义动画转换回到登录屏幕并重置其他所有内容。如果有帮助,我曾短暂考虑过将窗口的 rootViewController 替换为登录控制器,但我无法使动画转换为它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多