簡體   English   中英

iPhone-pushViewController問題

[英]iPhone - pushViewController Issue

我有一個根視圖控制器,應該在加載完成后立即加載另一個視圖控制器(即在viewDidLoad方法中)。

我正在使用UINavigationController以便將新的視圖控制器推入堆棧:

在我的rootviewcontrollerappdelegate中:

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

我在視圖控制器中有文本字段和按鈕要加載。 上面的方法似乎不起作用...它僅加載空白的灰色屏幕,並且不存在UINavigation欄。 如果我注釋掉第二行(pushViewController行),那么我會看到導航欄。 所以我認為它正在加載某些東西,但是沒有顯示正在加載的視圖控制器中的項目。

除非您做一些棘手的事情,否則應該在LoginViewController類而不是變量上調用alloc 另外,如果您已經在Interface Builder中設置了LoginViewController (與通過編程方式相對),則需要從NIB加載它:

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

看看docs中的initWithNibName:bundle: :。

不能完全確定您要實現的目標,但是在實例化LoginViewContoller它應該看起來像這樣

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

檢查navigationController是否指向nil。 如果可以,請嘗試

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

我遇到了同樣的問題,並在這里找到了上面的解決方案: UIViewController -viewDidLoad沒有被調用

從命名視圖控制器的性質來看,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

在您的應用程序委托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;
}

我可能在這里或那里打錯了字,但這是我要做的一種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM