2

UITableViewController内にありますUIViewController。このテーブルビューコントローラーだけが関係していましたが、ユーザーが行をタップすると、ビューがうまくプッシュされていました。ただし、に含まれる2つのうちの1つに移動してからUIViewController、行のタップは突然何もしません。

私は周りを検索してみましたが、この問題に遭遇したのは私が最初ではありませんが、どの回答も私の状況に合わないか、質問に有効な回答がありません。そのリンクは私が見つけた最も近いものでしたが、ストーリーボードは使用していません。個別のXIBを使用しています。

では、ビューコントローラ内のビューコントローラから新しいビューをプッシュするにはどうすればよいですか?

要点をまとめると:

  1. これが私が持っていたものであり、ユーザーを新しい画面に誘導するのにうまくいきました!

    // Normal table behavior, as illustrated by [another question][2].
    
    - (void)tableView:(UITableView *)tableView 
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
        SomeView *detailViewController = [[SomeView alloc] initWithNibName:@"SomeView" bundle:nil];
    
        // Pass the selected object to the new view controller.
        [self.navigationController pushViewController:detailViewController animated:YES];
    }
    
  2. これで、ビューのプロパティとしてviewcontrollerが作成されました。上記のコードは、tableviewcontrollerのファイルにあり、「メイン」ビューにはありませんが、新しい画面は表示されなくなりました。


コメントありがとうございます!これが私のシナリオを明確にするためのコードです。

  1. コントローラ内のコントローラ。これは、私がコンセプトをテストするために使用しているテストプロジェクトのファイルです。この場合、tableviewコントローラー内にtableviewコントローラーがあります。

    @interface SimpleTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
    
    // This is the controller within the controller
    @property IBOutlet SecondTableViewController *secondTableController;
    @property IBOutlet UITableView *secondTable;
    
  2. SecondTableViewControllerはこの楽しいビットを持っています。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Navigation logic may go here. Create and push another view controller.
    
        UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"SimpleNonTableViewController" bundle:nil];
        // ...
        // Pass the selected object to the new view controller.
        [manualViewControllerParent.navigationController  pushViewController:detailViewController animated:YES];
    }
    

ユーザーが操作するビューはに接続されていSimpleTableViewControllerます。このように、SecondTableViewControllerは「内」SimpleTableViewControllerです。詳細が必要な場合は、お気軽にコメントしてください。


テスト/コンセプトプロジェクトをgithubに配置しました。 https://github.com/hyliandanny/TableViewCeption

4

2 に答える 2

3

必要なことを行うには、カスタム コンテナー コントローラーを使用する必要があります。ストーリーボードを使用すると最も簡単ですが、xibs を使用したコードでも実行できます。外側のコントローラーは、テーブル ビュー コントローラーではなく、UIViewController にする必要があります。次のようなことができます (外側のコントローラーで):

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"SimpleNonTableViewController" bundle:nil];
    [self addChildViewController:detailViewController];
    detailViewController.view.frame = set the frame to what you want;
    [self.view addSubview:detailViewController.view];
    [detailViewController didMoveToParentViewController:self];
}

カスタム コンテナ コントローラに関する Apple のドキュメントを参照してください。

于 2013-01-23T01:23:39.553 に答える
0

確認する必要があること:

  • デリゲートUITableViewはコントローラーに接続されています。それ以外の場合は呼び出されませんdidSelectRow。これは xib または viewDidLoad メソッドで行うことができます。
  • あなたの self.navigationController は nil ではありません
  • あなたのdetailViewControllerはnilではありません

また、あなたが意味するのは、あなたがあなたUITableViewの中に持っているということだと思いますUIViewControllerUITableViewは単なるビューUITableViewControllerですが、 はコントローラーです。別のコントローラー内にコントローラーを配置することはできません。

于 2013-01-23T00:18:16.110 に答える