开发者

iPhone - pushViewController Issue

I have a root view controller which should load another view controller as soon as it is done loading (i.e. in the viewDidLoad method).

I am using the UINavigationController in order to push a new view controller onto the stack:

In my rootviewcontrollerappdelegate:

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

I have textfields and buttons in the view controller to be loaded. The above doesn't seem to work however...It loads just a blank grey screen and no UINavigation bar is present.开发者_运维技巧 If I comment out the second line (pushViewController line), then I see the navigation bar. So I think it is loading something, but the items in the view controller being loaded are not being shown...Any ideas why?


Check if navigationController is pointing to nil. If it does, try

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

I had the same problem and found the above solution here: UIViewController -viewDidLoad not being called


Unless you're doing something tricky, you should be calling alloc on the LoginViewController class rather than a variable. Also, if you've set up LoginViewController in Interface Builder (as opposed to programmatically), you'll need to load it from an NIB:

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

Have a look at initWithNibName:bundle: in the docs.


Not entirely sure what you are trying to achieve but when you instantiate LoginViewContoller it should probably look like this

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


Judging by the nature of your naming for your view controller, is your LoginViewController the first view controller for your UINavigationController?

If that is what you're trying to do, you should instead initialise your navigation controller with the LoginViewController as the root controller instead of pushing it onto the navigation stack.

UINavigationController has a method to do this:

- (id)initWithRootViewController:(UIViewController *)rootViewController

EDIT:

Well, one way you can go about it is like this.

In your application delegate .h file, you should have declared a UINavigationController.

@interface MyAppDelegate : NSObject <UIApplicationDelegate> 
{
    UINavigationController *navController;
}

@property (nonatomic, retain) UINavigationController *navController;
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

In your App Delegate didFinishLaunching:withOption: you can create an instance of your LoginViewController there, and use that to init your UINavigation controller as the root view controller

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

I probably have a typo here or there but that's one way I would go about doing it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜