マップビュー (ボタン付き) に多くの注釈があります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 年前のものであるため、混乱を避けるために削除しました。