2009-06-06 18 views
1

私は複数のビューを持つアプリケーションを持っています。別のボタンをクリックして別のビューを選択することができます。その中の1つはテーブルを表示します。その行のセルを選択すると、新しいビューが表示されます。ビューがロードされたことを示すログ行が表示されますが、画面は変更されません。 ItemDetailsViewControllerでUITableViewで行を選択するときに新しいビューを表示

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *targetCustomCell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    NSLog(@"in didSelectRowAtIndexPath"); 

    ItemDetailsViewController *detailsController = [[ItemDetailsViewController alloc] initWithNibName:@"ItemDetailsView" bundle:nil]; 
    [self.navigationController pushViewController:detailsController animated:YES]; 
    [self.window addSubview:[detailsController view]]; 
    [detailsController release]; 
    detailsController = nil; 
} 

、私は

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"in ItemDetailsViewController.viewDidLoad "); 
} 

は、私は両方のログ行が表示されているが、画面は変化しません。ビューが変わっていないのはなぜですか?ビューを変更する他の方法がありますか?

答えて

4

ナビゲーションコントローラーのpushViewControllerの代わりに[self presentModalViewController:detailsController animated:YES]を使用して詳細コントローラーを表示しようとするとどうなりますか?また、ウィンドウにビューを追加する必要はありません。ビューコントローラを押すだけで十分です。

NSLog([self.navigationController description])を追加して、self.navigationControllerがnilであるかどうかを確認してください。 (現在のコントローラがUINavigationControllerのサブコントローラでない場合に発生する可能性があります)。無関係のオブジェクトにメッセージを渡すだけでは失敗するので、問題が発生する可能性があります。

希望に役立ちます!

編集:通常、UINavigationControllerをサブクラス化する必要はありません。このページはAppleのdocs:Apple Docs: Using Navigation Controllersでご覧になれます。基本的には

// set up main view controller 
DrawingBrowserController *controller = [[DrawingBrowserController alloc] init]; 

// create a navigation controller that "wraps" the controller 
navigationController = [[UINavigationController alloc] initWithRootViewController: controller]; 

[controller release]; 

// Add the navigation controller's view to the window 
[window addSubview:[navigationController view]]; 
[window makeKeyAndVisible]; 

、あなたはナビゲーションコントローラであなたのルートビューコントローラを「ラップ」している:あなたはあなたのアプリケーションのデリゲートにプログラム的にあなたの「ルート」ビューコントローラを作成している場合は、このような何かをしたいと思います。 Interface Builderを使用している場合は、そこに設定することもできます。

+0

前の質問(http://stackoverflow.com/questions/948874/)に基づいて働いているpresentModalViewControllerを使用して、私はUINavigationControllerではなくUIViewControllerを拡張するコントローラを1つ持っていました。別のコントローラを作成する必要がありますか、またはUINavigationControllerをアプリケーションデリゲートに追加してそこからアクセスする必要がありますか? –

0

ナビゲーションコントローラがウィンドウのルートビューであることを確認しましたか? 通常はapplicationDidFinishLaunching方法でこのようにそれを実行する必要があります。それは必要がないので

[window addSubview:navigationController.view];  
[window makeKeyAndVisible]; 

また、あなたは、[self.window addSubview:[detailsController view]];を削除する必要があります。

関連する問題