我正在构建一个使用 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/