[解決済み] prepareForSegue: オブジェクトの渡し方
質問
マップビューに多くのアノテーションがあります (
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年も前のものなので、混乱を避けるために削除しました。
関連
-
dyld: ライブラリがロードされていません。エラーの解決
-
JenkinsがIOSを自動パッケージングしてモミを配布
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] Xcode 4で「既存のフレームワークを追加」する方法は?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。
-
[解決済み】iOSアプリの名前を変更する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
iOS classic error Undefined symbols for architecture XXX:
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] UITextViewのサイズをコンテンツに合わせるには?
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み] Swiftの配列を文字列に変換するには?