[英]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];
不能完全確定您要實現的目標,但是在實例化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.