2

ナビゲーションコントローラーを備えたテーブルビューコントローラーに値を渡すにはどうすればよいですか?

新しいViewControllerをプッシュしてアクティブにするコードがありますが、テーブルビューに値を渡す方法がありません。

UIViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

問題は、ナビゲーションコントローラーをストーリーボードにドラッグすると、テーブルビューにアタッチされてしまうことです。そのテーブルビューをカスタムテーブルビュークラスにリンクしました。ナビゲーションコントローラーのストーリーボードIDである「nav」という名前からビューコントローラーをインスタンス化すると、インスタンス化されるビューコントローラーとしてナビゲーションコントローラーを取得します(newTopViewController)。では、ビューをインスタンス化した場所からテーブルビューコントローラーに値を渡すにはどうすればよいですか?

4

2 に答える 2

3

私はこれがすでに答えられていることを知っています(うまく行われたttarules)、しかし私はいくつかの追加のコメントを渡すと思いました。ある種のビューコントローラーをナビゲーションコントローラーに組み込むことは非常に一般的です。標準のビューコントローラーをナビゲーションコントローラーでラップしてからモーダルセグエを実行すると、ボタンを配置するための優れたナビゲーションバーなどを備えたモーダルシーンが得られます。iPadでも、セグエの交換では通常、ナビゲーションコントローラーを使用できます。設計方法がすべてですが、コントローラーがどのように積み重ねられ、それらを簡単に参照するかを知っていれば、より多くの設計オプションがあります。これは、segueメソッドの準備で簡単に検出するために使用できるスニペットです。

if ([segue.destinationViewController isKindOfClass:[UINavigationController class]]) {

    //note: have to get reference to next vc through nav controller
    self.nextViewController = [[(UINavigationController*)segue.destinationViewController viewControllers]lastObject];
}
else {
    self.nextViewController = segue.destinationViewController;
}
于 2013-03-12T02:58:00.973 に答える
1

すでにそのVCにセグエする場合は、prepareForSegue内に渡す必要があります。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString:@"whateverYourSegueIsCalled"])
   {
        YourTableViewController *tableView=(YourTableViewController*)segue.destinationViewController;
        tableView.anyPublicProperty = yourValue;
    }
}

編集:

さて、実際にはtableViewが埋め込まれているだけなので、navigationViewControllerのviewControllersプロパティにアクセスする必要があります。

したがって、navigationViewControllerクラス内では次のようになります。

YourTableViewController *tableView = (YourTableViewController*)[self.navigationController.viewControllers objectAtIndex:0];
tableView.yourPublicProperty = whateverValueYouWant;

-他のVCも埋め込まれていない限り、tableViewはインデックス0のオブジェクトになります。したがって、VCを印刷して、そこから把握することができます。

于 2013-03-12T00:05:09.693 に答える