在viewDidLoad中UINavigationController pushViewController无法正常工作

时间:2011-07-30 01:43:52

标签: iphone objective-c xcode

4 个答案:

答案 0 :(得分:2)

您需要将lvc分配给 LoginViewController

- (void) viewDidAppear
{    
    [self performSelector:@selector(loginCheck:) withObject:nil afterDelay:0.5];
}    
- (void) loginCheck:(id)sender
{
    LoginViewController * lvc = [[LoginViewController alloc] init];
    //lvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [lvc setDelegate:self]; 
    //[self presentModalViewController:lvc animated:YES];   
    [self.navigationController pushViewController:lvc animated:YES];   
}

答案 1 :(得分:1)

点亮你的

[self.navigationController pushViewController:loginViewController];

进入

- (void)viewDidAppear:(BOOL)animated 

方法。 viewControllers navigationController在此之前不会加载

答案 2 :(得分:0)

有两件事可能会出错。 首先,您在applicationDidFinishLaunching中分配导航控制器,我不确定哪个先行,applicationDidFinishLaunchingviewDidLoad

如您所见,首先设置根视图控制器,然后分配导航控制器,然后在设置根视图控制器后立即启动viewDidLoad,然后分配导航控制器。所以viewDidLoad中的单词可能不起作用,因为当时导航控制器还没有出生。

但我并不完全理解前面的解释。这只是一种可能性。

还有一件奇怪的事情,你将导航控制器的导航栏隐藏起来

navigationController.navigationBarHidden = YES;

然后似乎用户无法弹回到根视图控制器,因此导航控制器不会推送登录视图控制器。 同时,模态视图控制器可以在导航栏隐藏或导航栏未分配的情况下被解除,因此当您将其作为模态视图控制器呈现时它将起作用。

但我仍然不太确定,因为我现在遇到了Xcode的一些问题,所以我无法测试前两个想法,抱歉。但我仍然建议您将navigationBarHidden设置为NO

答案 3 :(得分:0)

- (void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.navController = navigationController;
    [mainViewController release];
    [navigationController release];

    // Configure and display the window.
    [window addSubview:navController.view];
    [window makeKeyAndVisible];
}

- (void)viewDidLoad{    
    lvc = [[LoginViewController alloc] init];
    [self.navigationController pushViewController:lvc animated:YES];    
}