2

authenticationViewController の後に rootViewController を変更したいここに画像の説明を入力

-(IBAction)LoginButtonPushed:(id)sender {
    if ([(VerifyId)isEqual:@"C"]){
        CondidatsViewController *condidatsViewController = [[[CondidatsViewController alloc]initWithNibName:@"CondidatsViewController" bundle:nil]autorelease];
        UINavigationController *navController = self.navigationController;

        NSMutableArray *controllers = [[self.navigationController.viewControllers mutableCopy] autorelease];
        [controllers removeLastObject];
        navController.viewControllers = controllers;
        [navController pushViewController:condidatsViewController animated: YES];

    } else {
        RecruteursViewController *recruteursViewController = [[[RecruteursViewController alloc]initWithNibName:@"RecruteursViewController" bundle:nil]autorelease];
        UINavigationController *navController = self.navigationController;

        NSMutableArray *controllers = [[self.navigationController.viewControllers mutableCopy] autorelease];
        [controllers removeLastObject];
        navController.viewControllers = controllers;
        [navController pushViewController:recruteursViewController animated: YES];
    }
}

このコードは、ログイン ボタンを押したときです。CondidatsViewController または RecruteursViewController を rootView にする必要があります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    AcceuilViewController *viewController =[[[AcceuilViewController alloc]
                                             initWithNibName:@"AcceuilViewController" bundle:nil]autorelease];
    self.navController = [[[UINavigationController alloc]initWithRootViewController:viewController]
                         autorelease];
   self.window.rootViewController = self.navController;
    [self.window makeKeyAndVisible];
    return YES;
}
4

2 に答える 2

1

ビュー コントローラを nav および auth ビュー コントローラの 1 レベル上に配置するのはどうですか? このView Controllerは、有効なセッションをチェックし、適切なビューをスタックの一番上にプッシュできます。ルート ビュー コントローラーを変更しようとするのはお勧めできません。

編集:詳細

他のほとんどのビュー コントローラーのようにビューが関連付けられていないルート ビュー コントローラーがあります。このクラスをアプリ デリゲートのルート ビュー コントローラーとして設定します。

App Delegate.m

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

ルートView Controllerで、有効なセッションがあるかどうかを判断できます。それに基づいて、適切なビューをレンダリングできます。

RootViewController.m

@interface RootViewController ()
@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    BOOL isUserAuthenticated = [MyClasskToFigureOutIfUserIsAuthenticated isUserAuthenticated];

    if(isUserAuthenticated == NO) {
        AuthViewController *vcAuth = [[AuthViewController alloc] init];
        [self addChildViewController:vcAuth];
        [self.view addSubView:vcAuth.view];
    } else {
        //they are authenticated so push your other view controller.
    }
}

@end

これはかなり大雑把ですが、正しい方向に向けられるはずです。

于 2013-07-31T01:21:18.903 に答える