0

私が明らかに見逃しているこれを行う簡単な方法があると確信しています。

UINavigation コントローラーには 3 つのクラスがあります。

  1. UINavigationController 型の MasterNavViewController は、後続のすべてのビュー コントローラーのプロパティを所有します。
  2. FirstNavViewController - UIViewController 型の。
  3. SecondNavViewController - UIViewController 型の。

ここでは触れたくないスレッドの理由から、コードを使用して FirstNavViewController から SecondNavViewController に移動したいと思います。私が試してみました:

[self.navigationController pushViewController:SecondNavViewController animated:YES];

しかし、コードでエラーが発生します: 宣言されていない識別子 'SecondNavViewController' の使用 MasterNavViewController のことですか?

これをどのように進めるか正確にはわかりません。SecondNavViewController.h をインポートしようとしましたが、それもうまくいかないようです。

おそらく私はこれを間違った方法でやろうとしていると思っています。どんなポインタでも大歓迎です!ジェームズ

要求どおり: コード内で明示的に SecondNavViewController を作成していません。方法がわかりません...しかし、それは私が間違っている可能性が最も高い場所です?. クラスを作成し、IB にドラッグした UIViewController にリンクしました。通常、2 つの間にプッシュ セグエを作成するだけですが、この場合はそうしたくありません。

4

2 に答える 2

0

SecondNavViewControllerと等しくありませんsecondNavViewController。Objective-C では大文字と小文字が区別されます。

したがって、次のような SecondNavViewController インスタンスが必要です。

SecondNavViewController * secondNavViewController = [[SecondNavViewController alloc] ...];
[self.navigationController pushViewController:secondNavViewController animated:YES];
...
于 2012-12-05T02:02:59.357 に答える
0

インターフェイスビルダーで UIViewController を作成し、それをプログラムで初期化して表示する場合は、を使用してクラスのインスタンスを作成し、それをクラス名ではなく-initWithNibName:bundle:に渡す必要があります。-pushViewController:animated:

スレッド化の理由でこれを行っているため、メイン スレッドで新しいビュー コントローラーをプッシュするなど、UI のすべての更新を慎重に行う必要があります。これは、次のように簡単に実行できます。

dispatch_async(dispatch_get_main_queue(), ^(void)
{
    // update ui or push view controller etc.
});
于 2012-12-05T00:11:33.163 に答える