prepareForSegue: オブジェクトを渡す方法 質問する

prepareForSegue: オブジェクトを渡す方法 質問する

マップビュー (ボタン付き) に多くの注釈がありますrightCalloutAccessory。ボタンは、ここから への segue を実行します。どのコールアウト ボタンがクリックされmapviewたかに応じて、異なるオブジェクト (データを保持する)tableviewを に渡したいと思いますtableview

例えば: (完全に作り話です)

  • 注釈1 (オースティン) -> データオブジェクト1を渡す (オースティンに関連)
  • 注釈2 (ダラス) -> データオブジェクト2を渡す (ダラスに関連)
  • アノテーション 3 (ヒューストン) -> データ オブジェクト 3 を渡すなど... (お分かりでしょう)

どの吹き出しボタンがクリックされたかを検出できます。

私はprepareForSegue: を使用してデータ obj を宛先に渡していますViewController。この呼び出しで必要なデータ obj の追加の引数を取ることはできないので、同じ効果 (動的データ obj) を実現するためのエレガントな方法は何でしょうか?

何かヒントがあればありがたいです。

ベストアンサー1

メソッドでターゲット ビュー コントローラーへの参照を取得しprepareForSegue:、必要なオブジェクトをそこに渡すだけです。次に例を示します...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }
}

performSegueWithIdentifier:sender:修正:選択またはボタンの押下に基づいて新しいビューへの遷移をアクティブにするメソッドを使用することもできます。

たとえば、2 つのビュー コントローラーがあるとします。1 つ目は 3 つのボタンを含み、2 つ目は遷移前にどのボタンが押されたかを知る必要があります。次のように、メソッドIBActionを使用するコードでボタンを に接続できます。performSegueWithIdentifier:

// When any of my buttons are pressed, push the next view
- (IBAction)buttonPressed:(id)sender
{
    [self performSegueWithIdentifier:@"MySegue" sender:sender];
}

// This will get called too before the view appears
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"MySegue"]) {

        // Get destination view
        SecondView *vc = [segue destinationViewController];

        // Get button tag number (or do whatever you need to do here, based on your object
        NSInteger tagIndex = [(UIButton *)sender tag];

        // Pass the information to your destination view
        [vc setSelectedButton:tagIndex];
    }
}

編集: 最初に添付したデモ アプリケーションは 6 年前のものであるため、混乱を避けるために削除しました。

おすすめ記事