Xamarin逆引きTips
Xamarin.iOSで画面遷移先にデータを渡すには?(Storyboard使用)
Xamarin.iOSでStoryboardにより画面遷移を行う際に、遷移元から遷移先にデータを渡す方法を解説する。
Xamarin.iOSで画面遷移先にデータを渡す方法を解説する。「Tips:Xamarin.iOSで画面遷移を行うには?(Storyboard使用)」の続きとして解説するので、プロジェクトの準備は前回を参照してほしい。
1画面を準備する
前回終了時点で、MainStoryboard.storyboard
ファイルを開くと、以下の画面のようになっているはずだ。
中央(白)のFirstViewController
にテキストフィールドを配置し、[Name]をtextCountry
とする(図2)。また、右上(緑)のViewControllerには、渡されたデータを表示するためのラベルを配置し、[Name]をlabelCountry
とする。
2受け取ったデータを表示する
右上(緑)のViewControllerは、ソリューション作成時からあるStoryboardSampleViewController.cs
ファイルにマップされているので、これを開いて以下のようにコードを追加する。
public partial class StoryboardSampleViewController : UIViewController
{
public string Country { get; set; } //<--1
……省略……
#region View lifecycle
public override void ViewDidLoad()
{
base.ViewDidLoad();
labelCountry.Text = this.Country; //<--2
}
……省略……
}
|
Country
プロパティを用意し(1)、画面がロードされた時にその値をラベルに表示する(2)。Country
プロパティに、FirstViewController
からデータが設定される想定だ。
3画面遷移時にデータを渡す
右上(緑)のStoryboardSampleViewController
へデータを渡すには、FirstViewController.cs
ファイルを以下のように修正する。
partial class FirstViewController : UIViewController
{
……省略……
partial void buttonGotoNext_TouchUpInside(UIButton sender)
{
if (switchView.On) {
this.PerformSegue("goto_blue", this);
} else {
this.PerformSegue("goto_green", this);
}
}
public override void PrepareForSegue(
UIStoryboardSegue segue, NSObject sender) //<--1
{
base.PrepareForSegue(segue, sender);
if (String.Equals(segue.Identifier, "goto_green")) { //<--2
var vc = segue.DestinationViewController as StoryboardSampleViewController; //<--3
vc.Country = textCountry.Text;
}
}
}
|
1のPrepareForSegue
が今回追加したコードで、画面遷移が行われる前(遷移先のViewControllerが生成された後)で呼び出されるメソッドである。
どの画面に遷移するかは、segue.Identifier
から取得できるセグエIDで識別できる。右上(緑)へ移動する際のセグエIDは「goto_green」なので、この値で判定を行う(2)。
続いて、遷移先のViewControllerはこの時点ですでに生成されており、segue.DestinationViewController
プロパティで取得できるので(3)、実際のStoryboardSampleViewController
にキャストして(※C#ではas
句を使用するとキャストできない場合は例外でなくnullにできる)、2で用意したStoryboardSampleViewController
クラスのCountry
プロパティへテキストフィールドの値を設定する。
4プログラムを実行する
ここまでのプログラムを実行すると、図3のようになる。
入力した文字列が、緑のViewControllerに渡されているのが確認できる。
まとめ
画面遷移時に呼び出されるPrepareForSegue
メソッドをオーバーライドすることで、遷移先のViewControllerにデータを渡す方法を解説した。iOS開発者ならば、ネイティブの画面遷移の方法と全く同じなので違和感はないはずだ。
次回は画面を戻る際のセグエ(Unwind Segue)について解説する予定だ。
※以下では、本稿の前後を合わせて5回分(第13回~第17回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
13. Xamarin.Formsで新しいコントロールを作成するには?
Xamarin.Formsでは、既存のコントロールを拡張できるだけでなく、全く新しいコントロールを作成することもできる。その内部には、iOS/Androidで違うコントロールを含めたりできる。その作成方法を解説。
14. Xamarin.iOSで画面遷移を行うには?(Storyboard使用)
Xamarin.iOSでのStoryboardによる画面遷移を、Xamarin StudioのiOSデザイナーを使用して行う方法を解説。また、コードで画面遷移を実装する方法も説明する。
15. 【現在、表示中】≫ Xamarin.iOSで画面遷移先にデータを渡すには?(Storyboard使用)
Xamarin.iOSでStoryboardにより画面遷移を行う際に、遷移元から遷移先にデータを渡す方法を解説する。
16. Xamarin.iOSでの画面遷移で「戻る」を実現するには?(Storyboard、Unwind Segue使用)
画面遷移で戻る処理を実装する方法として、Xamarin StudioのiOSデザイナーで「Unwind Segue」を使う方法を説明する。
17. Xamarin.iOSで地図を表示するには?(MapKit使用)
Xamarin.iOSでiOS標準の地図ライブラリ「MapKit」を使って地図を表示する方法を解説。また、地図の種類の変更、ジェスチャの有効/無効の切り替えなども説明する。