iPhone - pushViewController Issue



我有一个根视图控制器,它应该加载另一个视图控制器一旦完成加载(即在viewDidLoad方法)。

我正在使用UINavigationController,以便将一个新的视图控制器推送到堆栈上:

In my rootviewcontrollerappdelegate:

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

我在视图控制器中有文本域和按钮要加载。然而,上述方法似乎不起作用……它只加载一个空白的灰色屏幕,没有导航条。如果我注释掉第二行(pushViewController行),我就会看到导航栏。我认为它正在加载一些东西,但是正在加载的视图控制器中的项目没有显示出来。知道为什么吗?

检查navigationController是否指向nil。如果是,请尝试

[self.view addSubview:self.pushViewController.view]

我有同样的问题,并在这里找到了上面的解决方案:UIViewController -viewDidLoad未被调用

除非您正在做一些棘手的事情,否则您应该在LoginViewController类而不是变量上调用alloc。此外,如果您已经在Interface Builder中设置了LoginViewController(与编程相反),则需要从NIB加载它:

LoginViewController *lvc = [[[LoginViewController alloc] initWithNibName:nil bundle:nil] autorelease];
[self.navigationController pushViewController:lvc animated:NO];

查看文档中的initWithNibName:bundle:

不完全确定你想要实现什么,但是当你实例化LoginViewContoller时,它应该看起来像这样

LoginViewController* lvc = [[LoginViewController alloc]init];

根据你的视图控制器命名的性质判断,你的LoginViewController是你的UINavigationController的第一个视图控制器吗?

如果这就是你想做的,你应该用LoginViewController作为根控制器来初始化你的导航控制器,而不是把它推到导航堆栈上。

UINavigationController有一个方法来做这件事:

- (id)initWithRootViewController:(UIViewController *)rootViewController
编辑:

你可以这样做。

在你的应用委派。h文件中,你应该声明一个UINavigationController。

@interface MyAppDelegate : NSObject <UIApplicationDelegate> 
{
    UINavigationController *navController;
}
@property (nonatomic, retain) UINavigationController *navController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end

在你的App Delegate didFinishLaunching:withOption:你可以在那里创建一个LoginViewController的实例,并使用它来初始化你的UINavigation控制器作为根视图控制器

#import "LoginViewController.h"
@implementation MyAppDelegate
@synthesize navController;
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    LoginViewController *loginController = [[LoginViewController alloc] init];
    navController = [[UINavigationController alloc] initWithRootViewController:loginController];
    [loginController release];
    [[self window] setRootViewController:navController];
    [navController release];
    [self.window makeKeyAndVisible];
    return YES;
}

我可能这里或那里有打字错误,但这是我要做的一种方法。

最新更新