2012-10-10 32 views
-1

情況: 在我的應用程序中有很多視圖控制器,它們以導航或模式視圖控制器的形式呈現。該應用幾乎可以在所有屏幕上與服務器通信。我想在他/她的憑證過期時向用戶顯示登錄屏幕。我想將登錄屏幕顯示爲屏幕上當前視圖頂部的模式,並在登錄成功後立即關閉。 我真的不知道我該如何做到這一點。如果某個視圖控制器在屏幕上顯示模式視圖,並且還需要將登錄屏幕顯示爲模式,那麼我應該從哪裏進行此操作。我嘗試在appDelegate中切換窗口的rootViewController,但它不能很好地工作,也弄亂了很多東西。請爲我提供建議。如何在頂部彈出視圖控制器?

回答

1

我看到你的問題。我認爲最好的方法是在課程生命週期內有一個簡單的課程,例如LoginHandler.h

您不必在應用程序啓動時對其進行初始化。你可以實現一個方便的技巧總是得到這個類的同一個實例,當你需要它:

// @interface 
+(id)sharedHandler; 

//@implementation 
+(id)sharedHandler { 
    static id sharedHandler = nil; 
    if (sharedHandler == nil) { 
     [sharedHandler = [[LoginHandler alloc] init]; 
    } 
    return sharedHandler; 
} 

現在,您只需用[LoginHandler sharedHandler],類似於用戶NSUserDefaultsUIApplication得到共享實例。

你可以有一個像

-(BOOL)renewLoginFromViewController:(UIViewController*)controller`; 

的方法呈現的模型視圖控制器是這樣的:

[controller presentModalViewController:loginScreen]; 

,並返回YES如果登錄成功(或不前消失)

你可以處理這個類的所有登錄邏輯。這將是一個很好的教科書示例encapsulation

+0

感謝蒙迪。有效。 – user1409592

+0

然後請檢查複選標記;-)。 – Mundi

+0

出於好奇並且與手邊的問題沒有任何關係,這是擁有某個班級共享對象的標準方式嗎? – esqew

0

只有在應用程序啓動時才檢查它是一件好事。這種方法建議在你的AppDelegate.m上執行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的。

相關問題