Xamarin逆引きTips

Xamarin逆引きTips

Xamarin.iOSで画面遷移先にデータを渡すには?(Storyboard使用)

2014年8月20日

Xamarin.iOSでStoryboardにより画面遷移を行う際に、遷移元から遷移先にデータを渡す方法を解説する。

奥山 裕紳(@amay077
  • このエントリーをはてなブックマークに追加

 Xamarin.iOSで画面遷移先にデータを渡す方法を解説する。「Tips:Xamarin.iOSで画面遷移を行うには?(Storyboard使用)」の続きとして解説するので、プロジェクトの準備は前回を参照してほしい。

1画面を準備する

 前回終了時点で、MainStoryboard.storyboardファイルを開くと、以下の画面のようになっているはずだ。

図1 前回終了時点のStoryboard

 中央(白)のFirstViewControllerにテキストフィールドを配置し、[Name]をtextCountryとする(図2)。また、右上(緑)のViewControllerには、渡されたデータを表示するためのラベルを配置し、[Name]をlabelCountryとする。

図2 テキストフィールドとラベルを配置したStoryboard

2受け取ったデータを表示する

 右上(緑)のViewControllerは、ソリューション作成時からあるStoryboardSampleViewController.csファイルにマップされているので、これを開いて以下のようにコードを追加する。

C#
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ファイルを以下のように修正する。

C#
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;
    }
  }
}
画面遷移時にデータを渡すコード

 1PrepareForSegueが今回追加したコードで、画面遷移が行われる前(遷移先のViewControllerが生成された後)で呼び出されるメソッドである。

 どの画面に遷移するかは、segue.Identifierから取得できるセグエIDで識別できる。右上(緑)へ移動する際のセグエIDは「goto_green」なので、この値で判定を行う(2)。

 続いて、遷移先のViewControllerはこの時点ですでに生成されており、segue.DestinationViewControllerプロパティで取得できるので(3)、実際のStoryboardSampleViewControllerにキャストして(C#ではas句を使用するとキャストできない場合は例外でなくnullにできる)、2で用意したStoryboardSampleViewControllerクラスのCountryプロパティへテキストフィールドの値を設定する。

4プログラムを実行する

 ここまでのプログラムを実行すると、図3のようになる。

図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」を使って地図を表示する方法を解説。また、地図の種類の変更、ジェスチャの有効/無効の切り替えなども説明する。

イベント情報(メディアスポンサーです)

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています(募集概要)。

ゴールドレベル

  • グレープシティ株式会社
  • 日本マイクロソフト株式会社