Xcode iOS选项卡栏控制器中的动态数据
我正在我的应用程序中使用选项卡栏控制器,但当应用程序首次启动时,我会在控制器顶部加载一个登录屏幕:Xcode iOS选项卡栏控制器中的动态数据,xcode,ios,login,tabbar,Xcode,Ios,Login,Tabbar,我正在我的应用程序中使用选项卡栏控制器,但当应用程序首次启动时,我会在控制器顶部加载一个登录屏幕: initialScreenViewController = [[Login alloc] init]; [window addSubview:tabBarController.view]; [window addSubview:initialScreenViewController.view]; [window makeKeyAndVisible]; return YES; 当用户成功进行身份验
initialScreenViewController = [[Login alloc] init];
[window addSubview:tabBarController.view];
[window addSubview:initialScreenViewController.view];
[window makeKeyAndVisible];
return YES;
当用户成功进行身份验证时,我将删除登录视图:
[self.view removeFromSuperview];
除了一个小的例外,这一切都很完美。“我的选项卡栏控制器”的第一个选项卡上有标签,这些标签根据用户登录的内容填充。但是,由于该视图实际上在用户进行身份验证之前加载到登录屏幕后面,因此在进行身份验证之后,它不会正确显示
我的问题是……有没有办法让选项卡栏页面在登录后如何“刷新”?或者甚至在登录后才加载选项卡栏控制器
谢谢!!
Jason您可以通过多种方式解决此问题,但我认为最简单的理解和实现方法是使用通知。让您的登录视图控制器在用户成功登录后发布通知,并让关心用户身份验证的任何其他视图控制器侦听该通知
您希望登录控制器和其他任何东西之间有一个相当松散的耦合——可能根据用户状态更改其内容的视图控制器不需要了解有关登录控制器的任何信息,登录控制器不必知道可能受用户状态更改影响的所有其他控制器。通知提供了松耦合,而且使用方便。谢谢Caleb!这很有道理!你能告诉我设置通知所需的代码的正确方向吗?当然。请看。它看起来是这样的:
UILocalNotification*notifyAlarm=[[[UILocalNotification alloc]init]autorelease];如果(notifyAlarm){notifyAlarm.fireDate=alertTime;notifyAlarm.repeatInterval=0;[app scheduleLocalNotification:notifyAlarm];}
两个问题-如果这是正确的,现在我是否立即设置警报时间?然后如何设置其他视图控制器以侦听此警报?非常感谢。否--使用NSNotification和NSNotificationCenter。UILocalNotification用于通知用户您的应用程序希望唤醒以执行某些操作。NSNotification为应用程序中的一个对象向其他对象发送消息提供了一种机制,而不需要知道任何有关这些对象的信息。这是侦听器模式的实现。谢谢Caleb!这看起来对吗。。。?此代码进入我的登录控制器:[[NSNotificationCenter defaultCenter]postNotificationName:@“LoginComplete”对象:self]代码>和需要更新的视图控制器中:[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(updateVariables:)name:@“LoginComplete”对象:nil]代码>