ios - 注销时重置 Storyboard

标签 ios uiviewcontroller xib nib

我正在构建一个使用 Storyboard的 IOS 5.1 网络客户端应用程序。我的操作之一是“注销”,在此期间我想将我的 Root View 重置为 Storyboard 的 Root View 创建的初始 View 。 (当您登录时,一些 View 项目会根据您的身份被删除或添加;当您注销时,我想将它们重置为我在 Storyboard 中指定的默认值。)

我意识到我可以通过编程方式重置/重新添加所有元素,但是 Storyboard有什么用呢?我认为必须有一种方法可以通过重新加载 View 文件回到原点,对吗?

最佳答案

我发现以下方法适合我。请注意,我使用的是 ARC,但不确定这是否对解决方案有很大影响。首先,在应用程序委托(delegate)类中,在 application:didFinishLaunchingWithOptions: 中,我使用以下代码行捕获初始 Storyboard 实例:

_initalStoryboard = self.window.rootViewController.storyboard;

(显然有一个实例变量UIStoryboard* _initalStoryboard;)

然后我在我的应用委托(delegate)中定义了以下函数:

- (void)resetWindowToInitialView
{
    for (UIView* view in self.window.subviews)
    {
        [view removeFromSuperview];
    }

    UIViewController* initialScene = [_initalStoryboard instantiateInitialViewController];
    self.window.rootViewController = initialScene;
}

请注意 for in 循环,它从 window 中删除所有 subview 。 UIWindow rootViewController 文档指出:

If the window has an existing view hierarchy, the old views are removed before the new ones are installed.

但是我发现情况并非如此...所以在分配新的 rootViewController 之前,我自己明确删除了现有 View 。使用此方法我没有发现任何令人担忧的副作用或内存泄漏。我绝不是 UIKit 魔法方面的专家,所以如果您打算自己使用它,我建议您测试并重新测试该解决方案。干杯

关于ios - 注销时重置 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273910/

相关文章:

javascript - 如何在平面列表中动态设置 react-native 图像源

ios - 从 NSCFString 获取 NSString

ios - iOS 13 中的自动旋转错误

iphone - 在 XCode/XIB 中更改 "System"字体

xcode - 本地化不适用于 XCode 6 中的 XIB 文件

ios - UIButton 的空自定义类改变了它的外观

iphone - iPhone SDK能否获取到当前连接的Wi-Fi SSID?

ios - 使用 swift 和 objective-c 桥接 header 和框架的命名空间冲突

iphone - 如何创建一个具有可由多个 ViewController 使用的关联 View 类的 Nib

ios - 3D Touch 快速操作启动黑屏。 UiNavigationController->UITableViewController-> UIViewController