1

私の問題はサンプルです...しかし、ビューが別のビューにプッシュされない理由はまだわかりません...

まず、NSMutableArray に多くのビューを追加します

static NSString *titleKey = @"title";
static NSString *viewControllerKey = @"viewController";

- (void)viewDidAppear:(BOOL)animated {
    self.menuList = [NSMutableArray array];

    FirstView *firstView = [[FirstView alloc]initWithNibName:nil bundle:nil];
    [self.menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                              NSLocalizedString(@"FirstView", @""), titleKey,
                              firstView, viewControllerKey,
                              nil]];
    [FirstView release];


    SecondView *secondView = [[SecondView alloc]initWithNibName:nil bundle:nil];
    [self.menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                              NSLocalizedString(@"SecondView", @""), titleKey,
                              secondView, viewControllerKey,
                              nil]];
    [SecondView release];

わかりました...これは、配列にviewcontrollerを追加する方法です...

テーブルビューでセルを押すと、表示したいビューに移動します

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *targetViewController = [[self.menuList objectAtIndex: indexPath.row] objectForKey:viewControllerKey];
    targetViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [[self navigationController] pushViewController:targetViewController animated:YES];
}

セルを押した後、何も起こりません

最初に、配列を正しく設定しなかった可能性があると思います

しかし、配列をログに記録すると

それは本当に中に何か...

結果は次のとおりです。

Log message: MENU LIST (
        {
        title = "FirstView";
        viewController = "<Firstview: 0x5822500>";
    },
        {
        title = "SecondView";
        viewController = "<SecondView: 0x5822870>";
    }
)

プログラムが動かない理由がわかりません……。

誰にもアイデアはありますか???

それはとても単純なことですが、まだここで3時間立ち往生しています....

どうもありがとう :)

4

3 に答える 3

1

最初に、のタイプをチェックしてtargetViewController、正しい ViewController が提供されているかどうかを確認する必要があります。正しい場合は、

self.navigationController値をチェックして、そうでないことを確認する必要がありますnil

2番目のことが問題だと思います。

于 2011-01-14T07:03:22.650 に答える
0

まず最初に言わなければならないのは、ブラボー、これは非常に難しい質問です。

私の答えが役立つかどうかは確信していますが、ただ聞いてください。

使用しているとき

UIViewController *targetViewController = [[self.menuList objectAtIndex: indexPath.row] objectForKey:viewControllerKey];

タイプ firstview または secondview のクラスを uiviewcontroller に割り当てていることが問題です。

ただし、親クラスが子クラスに取って代わることができるため、適切です (2 つのクラスが uiviewcontroller をサブクラス化したと仮定します)。

ブレークポイントを配置できます

  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

コントロールが関数の最後に到達する前に、カーソルを targetViewController に置き、その内容を確認します。

firstview または secondview がある場合は、firstview と secondview の変数の型が表示されます。

于 2011-01-14T06:38:58.370 に答える
0

プッシュ アクションを正常に行うには、ルート ビュー コントローラーを使用してアプリケーション デリゲートに UINavigationController を作成する必要があります (ルート ビュー コントローラー = FirstView-> これが UIViewController であることを願っています)。

これを行った後、FirstViewで呼び出すことができます

[[self navigationController] pushViewController:targetViewController animated:YES];

別の UIViewController をスタックにプッシュするため。

UINavigationController クラスは、階層コンテンツのナビゲーションを管理する特殊なビュー コントローラーを実装します。このクラスは、サブクラス化を意図していません。代わりに、コンテンツの階層的な性質をアプリケーションのユーザー インターフェイスに反映させたい場合は、そのインスタンスをそのまま使用します。このナビゲーション インターフェイスにより、データを効率的に表示できるようになり、ユーザーがそのコンテンツを簡単にナビゲートできるようになります。

UINavigationController ドキュメントへの公式リンクは次のとおりです。便利です。 UINavigationController ドキュメントへのリンク

于 2011-01-14T07:24:57.543 に答える