2013-07-31 5 views
2

Я хочу изменить RootViewController после authenticationViewController enter image description hereкак изменить 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; 
} 

ответ

3

Вы можете попробовать следующий метод UINavigationController с новым массивом желаемого вида контроллеров что-то вроде

[self.navigationController setViewControllers:@[newRootViewControllerInstance, secondVCInstanceIfRequired, thirdVC-and-so-on....] animated:NO]; 

Это будет делать трюк;)

1

Как на контроллере просмотра на один уровень выше ваших контроллеров навигации и auth? Этот контроллер просмотра может проверять действительный сеанс и толкать любой вид, соответствующий вершине стека. Представляется, что вам не рекомендуется менять контроллер корневого представления.

Edit: Подробнее

У вас есть контроллер представления корня, который не имеет представления, привязанную к нему, как и большинство других контроллеров зрения может. Вы устанавливаете этот класс в качестве контроллера корневого представления в своем делете приложения.

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

В контроллере зрения корень можно определить, если у вас есть действующий сеанс или нет. Исходя из этого, вы можете отобразить соответствующее представление.

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 

Это довольно грубый, но он должен направить вас в правильном направлении.

+0

вы можете объяснить более пожалуйста? – YasBES

Смежные вопросы