2013-12-14 166 views
0

所以在我App.Delegate我這樣做 -登錄屏幕和導航控制器

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    self.loginViewController =  [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:[NSBundle mainBundle]]; 



    UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController: self.loginViewController]; 
    self.window.rootViewController = navigation; 


    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

,在我登錄控制器我這樣做 -

- (IBAction)login:(UIButton *)sender { 
    NSString *username = self.userName.text; 
    NSString *password = self.password.text; 

    [AccountUtils emailLogin:username password:password useCookie:true callback:^(NSDictionary *loginResponseJSON){ 
     if([loginResponseJSON count] != 0){ 
      [self performSelectorOnMainThread:@selector(displaySearchController) withObject:nil waitUntilDone:YES]; 
      // [self performSelectorOnMainThread:@selector(switchState) withObject:nil waitUntilDone:YES]; 
     } else { 
     //incorrect entry info view here. 

     } 

    }]; 

} 

- (void) displaySearchController { 
    SearchViewController *searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchView" bundle:[NSBundle mainBundle]]; 
    UINavigationController *navigator = self.navigationController; 
    [navigator popViewControllerAnimated: YES]; 
    [navigator pushViewController: searchViewController animated:YES]; 
} 

如果我正確地註冊,我轉到第二個控制器的視圖,但在頂部,我仍然可以返回到登錄頁面。我不希望發生這種情況,我認爲這種情況會被popViewControllerAnimated行忽略。我怎樣才能讓它登錄,我不被允許回到登錄頁面?(換句話說,我猜彈出登錄控制器關閉導航控制器的堆棧?)

回答

0

你不想要在LoginViewController中使用UINavigationController,並且不想推送SearchViewController。相反,使用帶有SearchViewController的UINavigationController,當你顯示它時,使它成爲rootViewController。

0

這樣做是爲了達到你想要的。

  1. 移動displaySearchController方法您AppDelegate.m文件
  2. 不要聲明displaySearchController方法AppDelegate.h文件
  3. 現在AppDelegate.m文件定義displaySearchController方法:

    - (void) displaySearchController { 
        SearchViewController *searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchView" bundle:[NSBundle mainBundle]]; 
        UINavigationController *navigator = [[UINavigationController alloc]initWithRootViewController:searchViewController]; 
        self.window.rootViewController = navigator;    
    } 
    

呼叫一個新的本地方法showNewViewController從您的loginController爲:

[self performSelectorOnMainThread:@selector(showNewViewController) withObject:nil waitUntilDone:YES]; 

現在,在您loginController.m文件中定義showNewViewController

-(void)showNewViewController { 
    AppDelegate *appDele = [UIApplication sharedApplication].delegate; 
    [appDele displaySearchController]; 
} 

不要忘記將AppDelegate.h文件導入到你的loginController.m

這肯定會幫助你。

3

如果你只想刪除loginVC用戶在登錄後,你可以設置新navigationController爲AppDelegate中的RootViewController的。所以,你可以在AppDelegate移動displaySearchController方法和調用此方法(從loginVC)用戶登錄後:

-(void)displaySearchController{ 
    SearchViewController *searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchView" bundle:[NSBundle mainBundle]]; 
    UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController: searchViewController]; 
    self.window.rootViewController=navigation; 
} 

否則,如果你真的想推動的動畫,你可以刪除loginVC從navigationController viewControllers棧SearchDispalyController的viewDidAppear

-(void)viewDidAppear:(BOOL)animated{ 
    NSMutableArray *stackVCs=[self.navigationController.viewControllers mutableCopy]; 
    int idx=[stackVCs indexOfObject:self]; 
    //this remove the previous viewcontroller from the stack 
    [stackVCs removeObjectAtIndex:idx-1]; 
    self.navigationController.viewControllers=stackVCs; 
    [super viewDidAppear:animated]; 
} 

此外,在登錄VC之前,只需按下searchVC,您應該調用以隱藏後退按鈕:
[navigation.navigationItem setHidesBackButton:YES];