1. ホーム
  2. ios

[解決済み] prepareForSegue: オブジェクトの渡し方

2022-03-15 12:49:48

質問

マップビューに多くのアノテーションがあります ( rightCalloutAccessory ボタンがあります)。ボタンがセグエを実行するのは、この mapview から tableview . を渡したいのですが tableview を、どのコールアウトボタンがクリックされたかに応じて異なるオブジェクト(データを保持する)に変換します。

例えば (全くの創作)

  • annotation1 (Austin) -> pass data obj 1 (Austinに関連するもの)
  • annotation2 (Dallas) -> pass data obj 2 (ダラスに関連する)
  • annotation3 (Houston) -> pass data obj 3 and so on... (おわかりになりますか) アイデア)

どの吹き出しボタンがクリックされたかを検出することができるようになりました。

私は prepareForSegue : データ obj を転送先に渡すためです。 ViewController . この呼び出しに、私が必要とするデータ obj のための余分な引数を取らせることはできないので、同じ効果(動的データ obj)を達成するためのエレガントな方法は何でしょうか?

何かヒントがあれば、教えてください。

解決方法は?

で対象のビューコントローラの参照を取得するだけです。 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];
    }
}

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