在 iPhone 应用程序中注销时刷新 tabbarcontroller 视图

Posted

技术标签:

【中文标题】在 iPhone 应用程序中注销时刷新 tabbarcontroller 视图【英文标题】:Refreshing tabbarcontroller views on logout in iPhone application 【发布时间】:2011-12-04 03:56:46 【问题描述】:

我们有一个标签栏+导航控制项目。我们通过界面构建​​器创建了一个标签栏,并通过界面构建​​器将所有标签项添加到标签栏控制器。 我们的应用程序有一个登录屏幕,我们在开始时将其显示为模态表单。一旦用户通过身份验证,登录屏幕就会关闭(使用dismissModalScreen)并显示MainWindow。这一切都很好。

现在,我们有一个注销选项,单击该选项我们应该显示登录屏幕。我们也能够证明这一点。但问题是一旦用户再次通过身份验证,我们希望所有屏幕都重新加载。目前,所有屏幕都保持其状态并保留以前的数据。

我们尝试做的是:

[AppDelegate tabBarController 发布];

AppDelegate.tabBarController = nil;

我们已经尝试释放 tabBarController 并将其设置为 nil。但是一旦显示视图,我们就无法选择任何选项卡并且视图是空白的。

我们需要的是:

用户第二次登录后,如何释放和重新加载属于tabbar的每个viewcontroller。

您的帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我们找到了出路。我们现在所做的是,一旦用户重新登录,我们将释放视图控制器并重新创建它们并将其设置回 uitabbar。

NSMutableArray *arrControllers = [[AppDelegate.tabBarController.viewControllers] mutablecopy]; [arrControllers removeAtIndex:3]; [arrControllers removeAtIndex:2];

----创建新控制器

UIViewController viewController2 = [[UIViewController alloc] initWithNibName:@"viewController2" bundle:nil] autorelease];

UIViewController viewController3 = [[UIViewController alloc] initWithNibName:@"viewController3" bundle:nil] autorelease];

--创建导航控制器

UINavigationController navViewController2 = [[[UINavigationController alloc] initWithRootViewController:viewController2 ] autorelease];

UINavigationController navViewController3 = [[[UINavigationController alloc] initWithRootViewController:viewController3 ] autorelease];

[arrControllers addObject:navViewController2];

[arrControllers addObject:navViewController3];

[AppDelegate.tabViewController setViewControllers:arrControllers];

修改后一切正常。

我们面临的唯一问题是,如果我们从数组中释放所有对象,我们会得到一辆汽车。是不是因为当你释放 allObjects 时,第一个控制器 RootViewController 被释放了?

谢谢

【讨论】:

以上是关于在 iPhone 应用程序中注销时刷新 tabbarcontroller 视图的主要内容,如果未能解决你的问题,请参考以下文章

当 jwt 刷新令牌未过期时,React Native 应用程序注销

Instagram注销在iPhone中不起作用?

仅在刷新页面时令牌过期时注销?为啥?

React Native:登录或注销时如何以编程方式刷新应用程序?

如何在 iPhone 上从 Facebook 注销(本机/集成)

iPhone/Android 应用程序让用户共享登录/注销状态,例如 Skype