1

既に作成されたカスタム UIViewController クラス (AAA と言う) から継承した UIViewController サブクラス (BBB と言う) があります。BBB クラスには UITableView があり、ユーザーが UITableView の任意のセルをタップすると、別の UIViewController クラス (CCC と言います) をプッシュしたいと思います。

ということで、BBBのtableView: didSelectRowAtIndexPath: 方法でCCCコントローラーをプッシュしてみました。

私のコードは、

CCC *ccc = [[CCC alloc] init];
[self.navigationController pushViewController:ccc animated:YES];
[ccc release];

セルをタップしても何も起こらないので、次のコードで BBB クラスのナビゲーション コントローラを確認しました。

if (self.navigationController == nil)
{
    NSLog(@"Navigation controller is nil");
}

メッセージは正常に出力されました:) それで、ナビゲーションコントローラーに何かを割り当てようとしましたが、運が悪かったのですが、それは読み取り専用のプロパティです。

次に、rootviewcontroller として ccc を割り当ててローカル UINavigationController を作成し、そのローカル ナビゲーション コントローラーをプッシュしようとしました。「同じView Controllerインスタンスを複数回プッシュすることはサポートされていません」という例外がスローされます。

私の質問は、

  • ナビゲーション コントローラが AAA クラスで nil 値を取得する場所を見つけることは可能ですか? BBB クラスでナビゲーション コントローラーを nil として作成しませんでした。クラス AAA で「self.navigationController = nil」のようなステートメントがあるかどうかを確認します。しかし、そのようなものは何もありません。

  • CCC クラスをプッシュするにはどうすればよいですか?

ありがとう

4

2 に答える 2

1

これをアプリのデリゲートに入れると、コードの最初のバージョンが機能するはずです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    AAA *aaa = [[AAA alloc] init];
    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController: aaa];
    [self.window makeKeyAndVisible];

    return YES;
}
于 2012-12-12T19:17:23.477 に答える
0

プロパティをself.navigationController適切に設定するには、UINavigationControllerwithを作成する必要があります[[UINavigationController alloc] initWithRootViewController: aaa]。次に、現在 aaa を追加している場所 (splitViewController、または UIWindow など) では、代わりに、作成したナビゲーション コントローラーを使用します。

たとえば、コードを使用してビューを設定している場合、アプリのデリゲートで次のようにします。

AAA *aaa = [[AAA alloc] init];
UINavigationController *root = [[UINavigationController alloc] initWithRootViewController: aaa];
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[window makeKeyAndVisible];
window.rootViewController = root;

今、aaa.navigationControllerは を指すrootので、元の投稿で行ったことを実行できます。[self.navigationController pushViewController: bbb animated: YES];

于 2012-12-12T18:56:58.420 に答える