2

UIViewControllerがあります。このコントローラーはnavigationControllerに含まれています。このviewControllerにUITableViewControllerを追加します。tableViewのセルを押すときに、pushViewControllerメソッドを呼び出したいと思います。

私はこれを試しました:

UITableViewController


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{   
  FirstView *myViewController = [[FirstView alloc] init];
  [f myViewController];
}

UIViewController(FirstView)


-(void)pushIt
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    NSLog(@"didSelect"); // is printed
    [sCont release];
    sCont = nil;
}

しかし、何も起こりません。私はNSLog()をpushItメソッドに入れて、それを見ることができます。だから、なぜプッシュできないのかわかりません。

何か案が?

4

2 に答える 2

1

UIViewControllerには、呼び出されたView Controllerに存在する場合navigationControllerに を返すという名前のプロパティがあります。UINavigationController

このプロパティを使用すると、ビュー コントローラーをテーブル ビューのdidSelectRowAtIndexPath:メソッドからナビゲーション スタックにプッシュできます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    [sCont release];
}

現在のコードが機能しない理由は、おそらく次の理由によるものです。

  • サブビューとしてテーブルビューを追加したと言ったように、すでにFirstViewControllerのインスタンスがあります
  • navigationControllerユーザーがナビゲーション スタック上にないセルをタップしたときに、FirstViewController の新しいインスタンスを作成しようとすると、プロパティが nil を返すため、そこからビュー コントローラーをスタックにプッシュしようとしても機能しません。
于 2010-02-10T09:31:09.863 に答える
0

myViewController を割り当てて初期化しますが、それをナビゲーションやウィンドウなどにプッシュすることはありません。次に、sCont を myViewController にプッシュしますが、これはウィンドウにはありません。まず、myViewController を使用しないようにしてください。次に、sCont をナビゲーションにプッシュする前に myViewController をナビゲーションにプッシュしてみてください。

于 2010-02-10T09:31:20.487 に答える