簡體   English   中英

登錄屏幕和導航控制器

[英]Login Screen and Navigation controller

因此,在我的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行會解決這種情況。 如何使登錄時不返回登錄頁面?(換句話說,我想將登錄控制器從導航控制器的堆棧中彈出?)

如果您只想刪除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;
}

否則,如果您確實想要推送動畫,則可以從SearchDispalyController的viewDidAppear中的navigationController viewControllers堆棧中刪除loginVC:

-(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];
}

同樣在loginVC中,在按下searchVC之前,您應該調用它以隱藏“后退”按鈕:
[navigation.navigationItem setHidesBackButton:YES];

您不想將UINavigationController與LoginViewController一起使用,也不想推送SearchViewController。 而是將UINavigationController與SearchViewController一起使用,並在顯示時將其設為rootViewController。

這樣做可以實現您想要的。

  1. displaySearchController方法移至AppDelegate.m文件
  2. 不要在AppDelegate.h文件中聲明displaySearchController方法
  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; } 

從您的loginController調用新的本地方法showNewViewController

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

現在在您的loginController.m文件中將showNewViewController定義為

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

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

這一定會對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM