web-dev-qa-db-ja.com

self.navigationControllerがnull

私のビューコントローラーにはボタンがあります。ボタンを押すと、navigationControllerを入力し、次のようなコードを入力します。

-(IBAction)ShangHaiButtonPressed:(id)sender{
    marketviewcontroller = [[MarketViewController alloc]initWithNibName:@"MarketViewController" bundle:nil];
    NSLog(@"%@",self.navigationController);
    [self.navigationController pushViewController:marketviewcontroller animated:YES];
    [marketviewcontroller release];   
}

しかし、self.navigationControllerがnullであることがわかります。この問題を解決するにはどうすればよいですか?ありがとうございます。

更新:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    _switchviewcontroller = [[SwitchViewController alloc]initWithNibName:@"SwitchViewController" bundle:nil];
    [self.window addSubview:_switchviewcontroller.view];
    [self.window makeKeyAndVisible];
    return YES;
}
11
Gaojian922188

ビューコントローラのnavigationControllerプロパティは、ビューコントローラがナビゲーションコントローラのナビゲーションスタックにある場合にのみ、有効なナビゲーションコントローラオブジェクトを返します。ビューコントローラは、次の方法でナビゲーションスタックに追加できます。

  1. UINavigationControllerinitWithRootViewController:メソッドを使用して、ビューコントローラーをナビゲーションコントローラーのrootViewControllerにする

  2. UINavigationControllerpushViewController:メソッドを使用してViewControllerをプッシュする。

上記のいずれかの方法で、ViewControllerがナビゲーションスタックに追加されていることを確認してください。


編集:(didFinishLaunchingWithOptionsの後:質問にコードが追加されました):

didFinishLaunchingWithOptions:メソッドをこれに変更します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    _switchviewcontroller = [[SwitchViewController alloc]initWithNibName:@"SwitchViewController" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:_switchviewcontroller];
    [self.window addSubview:navController.view];
    [navController release];
    [self.window makeKeyAndVisible];
    return YES;
}

Swift 4(バージョン):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    switchviewcontroller = SwitchViewController(nibName: "SwitchViewController", bundle: nil)
    let navController = UINavigationController(rootViewController: switchviewcontroller)
    window.addSubview(navController.view)
    window.makeKeyAndVisible()
    return true
}
23
EmptyStack

このコードはあなたが探している解決策を生み出すでしょう:

-(IBAction)ShangHaiButtonPressed:(id)sender {
     UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self];
     [self.view removeFromSuperview];
     [appDelegate.window addSubview:nav.view];   // appDelegate is the delegate of your Application
     marketViewController = [[MarketViewController alloc] initWithNibName:@"MarketViewController" bundle:nil];
     [nav pushViewController:marketViewController animated:YES];
     [marketViewController release];    
}
3
Dhaval

AppDelegate.mファイルで、最初のビューをナビゲーション用のRootViewにします。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    myView *Obj=[[myView alloc]initWithNibName:@"myView" bundle:nil];
    UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:Obj];
    nav.navigationBar.barStyle = UIBarStyleBlackOpaque;
    [window addSubview:nav.view];
    [self.window makeKeyAndVisible];
    return YES;
}

MyView.mファイルに、myViewからmyNewViewに移動するための以下のコードを追加します。

-(void) registerMethod {
    myNewView *obj = [[myView alloc] initWithNibName:@"myNewView" bundle:nil];
    [self.navigationController pushViewController:obj animated:YES];

    [obj release];
}
0
Suraj Mirajkar