Xamarin.iOS でのユーザー インターフェイス オブジェクトの作成

Apple は、関連する機能を Xamarin.iOS 名前空間に相当する "フレームワーク" にグループ化します。 UIKit は、iOS 用のすべてのユーザー インターフェイス コントロールを含む名前空間です。

コードでラベルやボタンなどのユーザー インターフェイス コントロールを参照する必要がある場合は、必ず次の using ステートメントを含めてください。

using UIKit;

この章で説明するコントロールはすべて UIKit 名前空間にあり、各ユーザー コントロール クラス名には UI プレフィックスが付与されています。

UI コントロールとレイアウトは、次の 3 つの方法で編集できます。

  • Xamarin iOS Designer – Xamarin の組み込みのレイアウト デザイナーを使用して画面を設計します。 ストーリーボードまたは XIB ファイルをダブルクリックして、組み込みのデザイナーで編集します。
  • Xcode Interface Builder – Interface Builder を使用して、コントロールを画面レイアウトにドラッグします。 Solution Pad でファイルを右クリックし、[開く] > [Xcode Interface Builder] の順に選択して、Xcode でストーリーボードまたは XIB ファイルを開きます。
  • C# の使用 – コードを使用してコントロールをプログラムで構築し、ビュー階層に追加することもできます。

新しいストーリーボードと XIB ファイルを追加するには、iOS プロジェクトを右クリックし、[追加] > [新しいファイル...] の順に選択します。

どのメソッドを使用する場合でも、アプリケーション ロジック内で C# を使用してコントロール プロパティとイベントを操作できます。

Xamarin iOS Designer の使用

iOS Designer でユーザー インターフェイスの作成を開始するには、ストーリーボード ファイルをダブルクリックします。 コントロールは、次に示すようにツールボックスからデザイン サーフェイスにドラッグできます。

デザイン サーフェイスでコントロールを選択すると、Properties Pad にそのコントロールの属性が表示されます。 次のスクリーンショットに入力されている [ウィジェット] > [ID] > [名前] フィールドは、アウトレット名として使用されます。 C# でコントロールを参照する方法を次に示します。

プロパティ ウィジェット パディング

iOS Designer の使用方法の詳細については、「iOS Designer の概要」ガイドを参照してください。

Xcode Interface Builder の使用

Interface Builder の使用に慣れていない場合は、Apple の Interface Builder ドキュメントを参照してください。

Xcode でストーリーボードを開くには、右クリックしてストーリーボード ファイルのコンテキスト メニューにアクセスし、Xcode Interface Builder で開きます。

コントロールは、次に示すオブジェクト ライブラリからデザイン サーフェイスにドラッグできます。

Xcode オブジェクト ライブラリ

Interface Builder を使用して UI を設計する場合は、C# で参照するコントロールごとにアウトレットを作成する必要があります。 これを行うには、Xcode ツール バー ボタンの中央の [エディター] ボタンを使用して、アシスタント エディターをオンにします。

[Assistant Editor] (アシスタント エディター) ボタン

ユーザー インターフェイス オブジェクトをクリックし、.h ファイルにコントロール ドラッグします。 コントロール ドラッグするには、コントロール キーを押しながら、アウトレット (またはアクション) を作成するユーザー インターフェイス オブジェクトをクリックしたままにします。 Control キーを押しながらヘッダー ファイルにドラッグします。 @interface 定義の下にドラッグを完了します。 以下のスクリーンショットに示すように、青い線が Insert Outlet または Outlet Collection というキャプションとともに表示されます。

クリックを離すと、アウトレットの名前入力するプロンプトが表示されます。この名前は、コードで参照できる C# プロパティを作成するために使用されます。

アウトレットを作成する

Xcode の Interface Builder と Visual Studio for Mac の統合方法の詳細については、「Xib コード生成」ドキュメントを参照してください。

C# の使用

C# を使用して (たとえば、View または View Controller などで) ユーザー インターフェイス オブジェクトをプログラムで作成する場合は、次の手順に従います。

  • ユーザー インターフェイス オブジェクトのクラス レベル フィールドを宣言します。 コントロール自体は、ViewDidLoad などで、1 回作成してください。 その後、View Controller (例: ViewWillAppear) のライフサイクル メソッド全体でオブジェクトを参照できます。
  • コントロールのフレーム (画面上の X 座標と Y 座標、およびその幅と高さ) を定義する CGRect を作成します。 これを作成するには、using CoreGraphics ディレクティブが必要です。
  • コンストラクターを呼び出して、コントロールを作成して割り当てます。
  • プロパティまたはイベント ハンドラーを設定します。
  • Add() を呼び出して、ビュー階層にコントロールを追加します。

C# を使用してビュー コントローラーに UILabel を作成する簡単な例を次に示します。

UILabel label1;
public override void ViewDidLoad () {
    base.ViewDidLoad ();
    var frame = new CGRect(10, 10, 300, 30);
    label1 = new UILabel(frame);
    label1.Text = "New Label";
    View.Add (label1);
}

C# とストーリーボードの使用

View Controller をデザイン サーフェイスに追加すると、対応する 2 つの C# ファイルがプロジェクトに作成されます。 この例では、ControlsViewController.csControlsViewController.designer.cs が自動的に作成されています。

ViewController 部分クラス

この ControlsViewController.cs ファイルは、コードを対象としています。 ここには ViewDidLoadViewWillAppear といった View ライフサイクル メソッドが実装されており、独自のプロパティやフィールド、メソッドを追加できます。

ControlsViewController.designer.cs には、部分クラスを含むコードが生成されます。 Visual Studio for Mac のデザイン サーフェイスでコントロールに名前を付けるか、Xcode でアウトレットまたはアクションを作成すると、対応するプロパティまたは部分メソッドがデザイナー (designer.cs) ファイルに追加されます。 次のコードは、2 つのボタンとテキスト ビューに対して生成されたコードの例を示しています。ボタンの 1 つには TouchUpInside イベントもあります。

部分クラスのこれらの要素を使用すると、コードでコントロールを参照し、デザイン サーフェイスで宣言されているアクションに応答できます。

[Register ("ControlsViewController")]
    partial class ControlsViewController
    {
        [Outlet]
        [GeneratedCodeAttribute ("iOS Designer", "1.0")]
        UIKit.UIButton Button1 { get; set; }

        [Outlet]
        [GeneratedCodeAttribute ("iOS Designer", "1.0")]
        UIKit.UIButton Button2 { get; set; }

        [Outlet]
        [GeneratedCodeAttribute ("iOS Designer", "1.0")]
        UIKit.UITextField textfield1 { get; set; }

        [Action ("button2_TouchUpInside:")]
        [GeneratedCodeAttribute ("iOS Designer", "1.0")]
        partial void button2_TouchUpInside (UIButton sender);

        void ReleaseDesignerOutlets ()
        {
            if (Button1 != null) {
                Button1.Dispose ();
                Button1 = null;
            }
            if (Button2 != null) {
                Button2.Dispose ();
                Button2 = null;
            }
            if (textfield1 != null) {
                textfield1.Dispose ();
                textfield1 = null;
            }
        }
    }
}

designer.cs ファイルは手動で編集しないでください。IDE (Visual Studio for Mac または Visual Studio) が、ストーリーボードとの同期を維持する役割を担います。

ユーザー インターフェイス オブジェクトがプログラムによって View または ViewController に追加される場合、オブジェクト参照をご自身でインスタンス化して管理するため、デザイナー ファイルは必要ありません。