Iphone 如何在顶部弹出视图控制器?

Iphone 如何在顶部弹出视图控制器?,iphone,ios,model-view-controller,modalviewcontroller,Iphone,Ios,Model View Controller,Modalviewcontroller,情况: 在我的应用程序中有很多视图控制器,它们显示为导航或模式视图控制器。该应用程序几乎从所有屏幕与服务器通信。我想在用户的凭据过期时向用户显示登录屏幕。我想将登录屏幕显示为屏幕上当前视图顶部的一个模式,并在登录成功后立即将其关闭。 我真的不知道如何才能做到这一点。如果某个视图控制器在屏幕上显示一个模式视图,并且登录屏幕也需要显示为一个模式,那么我应该从何处执行此操作。我试着在appDelegate中切换窗口的rootViewController,但效果不好,而且还弄糟了很多事情。请给我一些建议

情况: 在我的应用程序中有很多视图控制器,它们显示为导航或模式视图控制器。该应用程序几乎从所有屏幕与服务器通信。我想在用户的凭据过期时向用户显示登录屏幕。我想将登录屏幕显示为屏幕上当前视图顶部的一个模式,并在登录成功后立即将其关闭。
我真的不知道如何才能做到这一点。如果某个视图控制器在屏幕上显示一个模式视图,并且登录屏幕也需要显示为一个模式,那么我应该从何处执行此操作。我试着在appDelegate中切换窗口的rootViewController,但效果不好,而且还弄糟了很多事情。请给我一些建议

检查
UIViewController
显示模式视图的方法(只要您不是为iOS构建,最好只在应用程序启动时检查。这样,建议在您的AppDelegate.m on didFinishLaunchWithOptions上执行此操作

你可以这样做:

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if (USER_HAS_VALID_CREDENTIALS) {
    self.viewController = [[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil] autorelease];
} else {
    self.viewController = [[[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil] autorelease]; // need to get credentials
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

请记住在成功登录后从LoginViewController启动RootViewController。

我看到了您的问题。我认为最好的方法是使用一个简单的类,比如
LoginHandler.h
,并在应用程序的生命周期内保持它

应用程序启动时,您不必对其进行初始化。您可以实施一个方便的技巧,在需要时始终获取此类的相同实例:

// @interface
+(id)sharedHandler;

//@implementation
+(id)sharedHandler {
   static id sharedHandler = nil;
   if (sharedHandler == nil) {
      [sharedHandler = [[LoginHandler alloc] init];
   }
   return sharedHandler;
}
现在,您只需使用
[LoginHandler sharedHandler]
获取共享实例,类似于用户
NSUserDefaults
UIApplication

你可以有这样的方法

-(BOOL)renewLoginFromViewController:(UIViewController*)controller`; 
它向模型视图控制器显示如下内容:

[controller presentModalViewController:loginScreen]; 
如果登录成功(或者在登录成功之前它没有消失),则返回
YES


你可以从这个类中处理所有登录逻辑。这将是一个很好的教科书示例。

谢谢Mundi。它起作用了。然后请检查复选标记;-)。出于好奇,并且与手头的问题无关,这是拥有某个类的共享对象的标准方法吗?@esqew它确实很有效。这就是所谓的单例设计。它对于应用内购买监控、网络状态、后台导入等非常有用,