Xamarin.Mac の標準コントロール

この記事では、Xamarin.Mac アプリケーションでのボタン、ラベル、テキスト フィールド、チェック ボックス、セグメント化されたコントロールなどの標準的な AppKit コントロールの操作について説明します。 インターフェイス ビルダーを使用してインターフェイスに追加し、コードで操作する方法について説明します。

Xamarin.Mac アプリケーションで C# と .NET を使用する場合、開発者と Xcode が行うのと同じ AppKit コントロールにObjective-Cアクセスできます。 Xamarin.Mac は Xcode と直接統合されるため、Xcode のインターフェイス ビルダーを使用して、Appkit コントロールを作成してメインできます (または必要に応じて、C# コードで直接作成することもできます)。

AppKit コントロールは、Xamarin.Mac アプリケーションのユーザー インターフェイスを作成するために使用される UI 要素です。 これらは、ボタン、ラベル、テキスト フィールド、チェック ボックス、セグメント化されたコントロールなどの要素で構成され、ユーザーが操作したときにインスタント アクションや表示される結果を引き起こします。

The example app main screen

この記事では、Xamarin.Mac アプリケーションでの AppKit コントロールの操作の基本について説明します。 この記事で使用する 主要な概念と手法については、まず Hello Mac の記事、特 に Xcode とインターフェイス ビルダーアウトレットとアクション の概要に関するセクションを参照することを強くお勧めします。

Xamarin.Mac Internals ドキュメントの「C# クラス/メソッドを Xamarin.Mac Internals のセクションにObjective-C公開する」も参照してください。C# クラスObjective-Cをオブジェクトと UI 要素に結び付けるために使用されるコマンドについてExport説明Registerしています。

コントロールとビューの概要

macOS (旧称 Mac OS X) は、AppKit Framework を介してユーザー インターフェイス コントロールの標準セットを提供します。 これらは、ボタン、ラベル、テキスト フィールド、チェック ボックス、セグメント化されたコントロールなどの要素で構成され、ユーザーが操作したときにインスタント アクションや表示される結果を引き起こします。

すべての AppKit コントロールには、ほとんどの用途に適した標準の組み込みの外観があります。一部のコントロールでは、サイドバー領域や Notification Center ウィジェットなど、ウィンドウ フレーム領域または Vibrance Effect コンテキストで使用するための代替の外観を指定します。

Apple では、AppKit コントロールを操作する際に次のガイドラインを提案しています。

  • 同じビューでコントロール サイズを混在しないようにします。
  • 一般に、コントロールの垂直方向のサイズ変更は避けてください。
  • コントロール内のシステム フォントと適切なテキスト サイズを使用します。
  • コントロール間の適切な間隔を使用します。

詳細については、Apple の OS X ヒューマン インターフェイス ガイドラインの「コントロールとビューについて」セクションを参照してください。

ウィンドウ フレームでのコントロールの使用

表示スタイルを含む AppKit コントロールのサブセットがあり、ウィンドウのフレーム領域に含めることができます。 例については、メール アプリのツール バーを参照してください。

A Mac Window frame

  • 丸いテクスチャボタン - スタイル NSButtonNSTexturedRoundedBezelStyle.
  • テクスチャの丸いセグメント化されたコントロール - A NSSegmentedControl のスタイル NSSegmentStyleTexturedRoundedを持つ .
  • テクスチャの丸いセグメント化されたコントロール - A NSSegmentedControl のスタイル NSSegmentStyleSeparatedを持つ .
  • ラウンドテクスチャポップアップメニュー - のスタイルNSTexturedRoundedBezelStyleを持つANSPopUpButton.
  • ラウンドテクスチャドロップダウンメニュー - のスタイルNSTexturedRoundedBezelStyleを持つANSPopUpButton.
  • 検索バー - A NSSearchField.

Apple は、ウィンドウ フレームで AppKit コントロールを操作する場合に、次のガイドラインを提案します。

  • ウィンドウ本体でウィンドウ フレーム固有のコントロール スタイルを使用しないでください。
  • ウィンドウ フレームでウィンドウ本文コントロールまたはスタイルを使用しないでください。

詳細については、Apple の OS X ヒューマン インターフェイス ガイドラインの「コントロールとビューについて」セクションを参照してください。

インターフェイス ビルダーでのユーザー インターフェイスの作成

新しい Xamarin.Mac Cocoa アプリケーションを作成すると、既定で標準の空白ウィンドウが表示されます。 このウィンドウは、プロジェクトに自動的に .storyboard 含まれるファイルで定義されます。 Windows デザインを編集するには、ソリューション エクスプローラーファイルをMain.storyboardダブルクリックします。

Selecting the Main Storyboard in the Solution Explorer

これにより、Xcode のインターフェイス ビルダーでウィンドウ デザインが開きます。

Editing the storyboard in Xcode

ユーザー インターフェイスを作成するには、UI 要素 (AppKit コントロール) をライブラリ インスペクターからインターフェイス ビルダーのインターフェイス エディターにドラッグします。 次の例では、垂直分割ビュー コントロールがライブラリ インスペクターからドラッグされ、インターフェイス エディターのウィンドウに配置されています。

Selecting a Split View from the Library

Interface Builder でユーザー インターフェイスを作成する方法の詳細については、Xcode と Interface Builder の概要に関するドキュメントを参照してください。

サイズ設定と配置

コントロールがユーザー インターフェイスに含まれたら、制約エディター使用して、手動で値を入力して位置とサイズを設定し、親ウィンドウまたはビューのサイズを変更したときにコントロールを自動的に配置およびサイズ変更する方法を制御します。

Setting the constraints

コントロールを特定の (x,y) 位置に貼り付ける場合は、[自動サイズ設定] ボックスの外側の赤い I ビームを使用します。 次に例を示します。

Editing a constraint

選択したコントロール ( [階層ビュー ] & [インターフェイス エディター] で) が、ウィンドウまたはビューのサイズ変更または移動時に、ウィンドウまたはビューの右上の位置にスタックするように指定します。

エディターコントロールのその他の要素 (Height や Width など):

Setting the height

線形エディタを使用して、拘束を使用して要素の配置を制御することもできます。

The Alignment Editor

重要

(0,0) が画面の左上隅である iOS とは異なり、macOS (0,0) では左下隅です。 これは、macOS では数値が上および右に増加する数値を持つ数学的座標系を使用するためです。 ユーザー インターフェイスに AppKit コントロールを配置する場合は、これを考慮する必要があります。

カスタム クラスの設定

AppKit コントロールを操作するときに、サブクラス化して既存のコントロールを作成し、そのクラスのカスタム バージョンを作成する必要があります。 たとえば、ソース リストのカスタム バージョンを定義するとします。

using System;
using AppKit;
using Foundation;

namespace AppKit
{
    [Register("SourceListView")]
    public class SourceListView : NSOutlineView
    {
        #region Computed Properties
        public SourceListDataSource Data {
            get {return (SourceListDataSource)this.DataSource; }
        }
        #endregion

        #region Constructors
        public SourceListView ()
        {

        }

        public SourceListView (IntPtr handle) : base(handle)
        {

        }

        public SourceListView (NSCoder coder) : base(coder)
        {

        }

        public SourceListView (NSObjectFlag t) : base(t)
        {

        }
        #endregion

        #region Override Methods
        public override void AwakeFromNib ()
        {
            base.AwakeFromNib ();

        }
        #endregion

        #region Public Methods
        public void Initialize() {

            // Initialize this instance
            this.DataSource = new SourceListDataSource (this);
            this.Delegate = new SourceListDelegate (this);

        }

        public void AddItem(SourceListItem item) {
            if (Data != null) {
                Data.Items.Add (item);
            }
        }
        #endregion

        #region Events
        public delegate void ItemSelectedDelegate(SourceListItem item);
        public event ItemSelectedDelegate ItemSelected;

        internal void RaiseItemSelected(SourceListItem item) {
            // Inform caller
            if (this.ItemSelected != null) {
                this.ItemSelected (item);
            }
        }
        #endregion
    }
}

インターフェイス ビルダーで[Register("SourceListView")]使用できるように、命令がクラスをObjective-C公開SourceListViewする場所。 詳細については、Xamarin.Mac Internals ドキュメントの「C# クラス/メソッドObjective-Cの公開」セクションを参照してください。C# クラスObjective-Cをオブジェクトと UI 要素に結び付けるために使用されるコマンドについてExport説明Registerしています。

上記のコードを配置すると、拡張する基本型の AppKit コントロールをデザイン サーフェイス (次の例ではソース リスト) にドラッグし、Identity Inspector切り替え、カスタム クラスを公開先の名前 (例SourceListView) にObjective-C設定できます。

Setting a custom class in Xcode

アウトレットとアクションの公開

C# コードで AppKit コントロールにアクセスするには、その前に、アウトレットまたはアクションとして公開する必要があります。 これを行うには、インターフェイス階層またはインターフェイス エディターで特定のコントロールを選択し、アシスタント ビュー切り替えます (編集用にウィンドウが.h選択されていることを確認してください)。

Selecting the correct file to edit

Control キーを押しながら AppKit コントロールから give .h ファイルにドラッグして、アウトレットまたはアクションの作成を開始します

Dragging to create an Outlet or Action

作成する露出の種類を選択し、[アウトレット] または [アクション] に名前を付けます

Configuring the Outlet or Action

アウトレットとアクションの操作の詳細については、「Xcode とインターフェイス ビルダーの概要」ドキュメントの「アウトレットとアクション」セクションを参照してください

Xcode との変更の同期

Xcode から Visual Studio for Mac に戻ると、Xcode で行った変更はすべて Xamarin.Mac プロジェクトと自動的に同期されます。

ソリューション エクスプローラー内をSplitViewController.designer.cs選択すると、C# コードでアウトレットアクションがどのように構成されているかを確認できます。

Synchronizing Changes with Xcode

ファイル内の SplitViewController.designer.cs 定義に注目してください。

[Outlet]
AppKit.NSSplitViewItem LeftController { get; set; }

[Outlet]
AppKit.NSSplitViewItem RightController { get; set; }

[Outlet]
AppKit.NSSplitView SplitView { get; set; }

Xcode のファイル内の定義を MainWindow.h 並べ替えます。

@interface SplitViewController : NSSplitViewController {
    NSSplitViewItem *_LeftController;
    NSSplitViewItem *_RightController;
    NSSplitView *_SplitView;
}

@property (nonatomic, retain) IBOutlet NSSplitViewItem *LeftController;

@property (nonatomic, retain) IBOutlet NSSplitViewItem *RightController;

@property (nonatomic, retain) IBOutlet NSSplitView *SplitView;

ご覧のように、Visual Studio for Mac はファイルの変更を .h リッスンし、それぞれの .designer.cs ファイルの変更を自動的に同期して、アプリケーションに公開します。 Visual Studio for Mac では、クラスに加えた変更を上書きする変更SplitViewController.csを行う必要がないように、部分クラスであることにも気付SplitViewController.designer.csくかもしれません。

あなたは通常、自分を SplitViewController.designer.cs 開く必要はありません、それは教育目的でのみここに提示されました。

重要

ほとんどの場合、Visual Studio for Mac では Xcode で行われた変更が自動的に表示され、Xamarin.Mac プロジェクトに同期されます。 同期が自動的に行われないときは Xcode に戻り、再び Visual Studio for Mac に戻ります。 こうすると通常、同期サイクルが開始します。

ボタンの操作

AppKit には、ユーザー インターフェイス デザインで使用できるいくつかの種類のボタンが用意されています。 詳細については、AppleOS Xヒューマンインターフェイスガイドラインのボタンセクションを参照してください。

An example of the different button types

ボタンがアウトレット経由で公開されている場合は、次のコードが押されていることに応答します。

ButtonOutlet.Activated += (sender, e) => {
        FeedbackLabel.StringValue = "Button Outlet Pressed";
};

Actions によって公開されたボタンの場合、public partialXcode で選択した名前でメソッドが自動的に作成されます。 Action に応答するには、Action が定義されたクラスの部分メソッドを完了します。 次に例を示します。

partial void ButtonAction (Foundation.NSObject sender) {
    // Do something in response to the Action
    FeedbackLabel.StringValue = "Button Action Pressed";
}

状態 (On や Off など) を持つボタンの場合、状態は列挙型に対してNSCellStateValueプロパティをState使用してチェックまたは設定できます。 次に例を示します。

DisclosureButton.Activated += (sender, e) => {
    LorumIpsum.Hidden = (DisclosureButton.State == NSCellStateValue.On);
};

NSCellStateValue の場所を指定できます。

  • オン - ボタンが押されているか、コントロールが選択されています (チェック ボックスのチェックなど)。
  • オフ - ボタンが押されていないか、コントロールが選択されていません。
  • 混合 - オンオフの状態の混合。

ボタンを既定としてマークし、同等のキーを設定する

ユーザー インターフェイス デザインに追加したボタンについては、そのボタンを既定のボタンとしてマークできます。このボタンは、ユーザーがキーボードの Return/Enter キーを押したときにアクティブ化されます。 macOS では、このボタンは既定で青色の背景色を受け取ります。

ボタンを既定として設定するには、Xcode のインターフェイス ビルダーでボタンを選択します。 次に、[属性インスペクター] で [同等のキー] フィールドを選択し、Return/Enter キーを押します。

Editing the Key Equivalent

同様に、マウスではなくキーボードを使用してボタンをアクティブ化するために使用できる任意のキー シーケンスを割り当てることができます。 たとえば、上の図で Command キーを押しながら C キーを押します。

アプリが実行され、ボタン付きのウィンドウがキーでフォーカスされている場合、ユーザーが Command キーを押しながら C キーを押すと、ボタンのアクションがアクティブになります (ユーザーがボタンをクリックした場合と同様)。

チェックボックスとラジオ ボタンの操作

AppKit には、ユーザー インターフェイスデザインで使用できるいくつかの種類のチェックボックスとラジオ ボタン グループが用意されています。 詳細については、AppleOS Xヒューマンインターフェイスガイドラインのボタンセクションを参照してください。

An example of the available checkbox types

チェックボックスとラジオ ボタン (アウトレット経由で公開) の状態 (オンオフなど) は、状態をチェックしたり、列挙型に対してNSCellStateValueプロパティでState設定したりすることができます。 次に例を示します。

AdjustTime.Activated += (sender, e) => {
    FeedbackLabel.StringValue = string.Format("Adjust Time: {0}",AdjustTime.State == NSCellStateValue.On);
};

NSCellStateValue の場所を指定できます。

  • オン - ボタンが押されているか、コントロールが選択されています (チェック ボックスのチェックなど)。
  • オフ - ボタンが押されていないか、コントロールが選択されていません。
  • 混合 - オンオフの状態の混合。

ラジオ ボタン グループ内のボタンを選択するには、ラジオ ボタンを公開してアウトレットとして選択し、そのプロパティをState設定します。 例:

partial void SelectCar (Foundation.NSObject sender) {
    TransportationCar.State = NSCellStateValue.On;
    FeedbackLabel.StringValue = "Car Selected";
}

グループとして機能し、選択した状態を自動的に処理するラジオ ボタンのコレクションを取得するには、新しい アクション を作成し、グループ内のすべてのボタンをそれにアタッチします。

Creating a new Action

次に、属性インスペクターの各ラジオ ボタンに一意Tag割り当てます。

Editing a radio button tag

変更を保存して Visual Studio for Mac に戻り、すべてのラジオ ボタンがアタッチされているアクション処理するコードを追加します。

partial void NumberChanged(Foundation.NSObject sender)
{
    var check = sender as NSButton;
    Console.WriteLine("Changed to {0}", check.Tag);
}

このプロパティを Tag 使用して、どのラジオ ボタンが選択されたかを確認できます。

メニュー コントロールの操作

AppKit には、ユーザー インターフェイスデザインで使用できるいくつかの種類のメニュー コントロールが用意されています。 詳細については、AppleOS Xヒューマンインタフェースガイドラインのメニューコントロールセクションを参照してください。

Example menu controls

メニュー コントロール データの提供

macOS で使用できるメニュー コントロールは、内部リスト (Interface Builder で事前に定義することも、コードを使用して設定することもできます) から、または独自のカスタム外部データ ソースを提供することによって、ドロップダウン リストを設定するように設定できます。

内部データの操作

インターフェイス ビルダーで項目を定義するだけでなく、メニュー コントロール (などNSComboBox) には、メイン含まれる内部リストから項目を追加、編集、または削除できるメソッドの完全なセットが用意されています。

  • Add - リストの末尾に新しい項目を追加します。
  • GetItem - 指定されたインデックス位置にある項目を返します。
  • Insert - 指定した場所にあるリストに新しい項目を挿入します。
  • IndexOf - 指定された項目のインデックスを返します。
  • Remove - 指定した項目をリストから削除します。
  • RemoveAll - リストからすべての項目を削除します。
  • RemoveAt - 指定したインデックス位置にある項目を削除します。
  • Count - リスト内の項目数を返します。

重要

Extern データ ソース (UsesDataSource = true) を使用している場合、上記のいずれかのメソッドを呼び出すと例外がスローされます。

外部データ ソースの操作

組み込みの内部データを使用してメニュー コントロールの行を提供する代わりに、必要に応じて外部データ ソースを使用し、項目 (SQLite データベースなど) に独自のバッキング ストアを提供できます。

外部データ ソースを操作するには、メニュー コントロールのデータ ソース (NSComboBoxDataSource たとえば) のインスタンスを作成し、必要なデータを提供するためにいくつかのメソッドをオーバーライドします。

  • ItemCount - リスト内の項目数を返します。
  • ObjectValueForItem - 指定されたインデックスの項目の値を返します。
  • IndexOfItem - give 項目値のインデックスを返します。
  • CompletedString - 部分的に型指定された項目値の最初の一致する項目値を返します。 このメソッドは、オートコンプリートが有効になっている場合にのみ呼び出されます (Completes = true)。

詳細については、「データベースの操作」ドキュメントの「データベースと ComboBoxes」セクションを参照してください。

リストの外観を調整する

メニュー コントロールの外観を調整するには、次のメソッドを使用できます。

  • HasVerticalScroller - 場合 trueは、コントロールに垂直スクロール バーが表示されます。
  • VisibleItems - コントロールを開いたときに表示される項目の数を調整します。 既定値は 5 です。
  • IntercellSpacing- 左右の余白を指定し、項目の前後のスペースを指定する場所Widthを指定NSSizeして、特定のHeight項目の周囲の領域の量を調整します。
  • ItemHeight - リスト内の各項目の高さを指定します。

ドロップダウンタイプの場合、最初の NSPopupButtonsメニュー項目はコントロールのタイトルを提供します。 例:

An example menu control

タイトルを変更するには、このアイテムを Outlet として公開し、次のようなコードを使用します。

DropDownSelected.Title = "Item 1";

選択した項目の操作

次のメソッドとプロパティを使用すると、メニュー コントロールの一覧で選択した項目を操作できます。

  • SelectItem - 指定したインデックス位置にある項目を選択します。
  • Select - 指定された項目値を選択します。
  • DeselectItem - 指定したインデックス位置にある項目の選択を解除します。
  • SelectedIndex - 現在選択されている項目のインデックスを返します。
  • SelectedValue - 現在選択されている項目の値を返します。

リストの ScrollItemAtIndexToTop 先頭にある特定のインデックスに項目を表示し、指定した ScrollItemAtIndexToVisible インデックスの項目が表示されるまでスクロールしてリストに移動します。

イベントへの応答

メニュー コントロールは、ユーザーの操作に応答するために次のイベントを提供します。

  • SelectionChanged - ユーザーがリストから値を選択したときに呼び出されます。
  • SelectionIsChanging - 新しいユーザーが選択した項目がアクティブな選択になる前に呼び出されます。
  • WillPopup - 項目のドロップダウン リストが表示される前に呼び出されます。
  • WillDismiss - アイテムのドロップダウン リストが閉じられる前に呼び出されます。

コントロールの場合NSComboBox、ユーザーがコンボ ボックス内のテキストの値を編集するたびに呼び出されるイベントなどChanged、コントロールには、すべて同じイベントNSTextFieldが含まれます。

必要に応じて、インターフェイス ビルダーで定義されている内部データ メニュー項目に応答するには、項目をアクションアタッチし、次のようなコードを使用して、ユーザーによってトリガーされるアクション応答します。

partial void ItemOne (Foundation.NSObject sender) {
    DropDownSelected.Title = "Item 1";
    FeedbackLabel.StringValue = "Item One Selected";
}

メニューとメニュー コントロールの操作の詳細については、メニューとポップアップ ボタンとプルダウン リストのドキュメントを参照してください。

選択コントロールの操作

AppKit には、ユーザー インターフェイスデザインで使用できるいくつかの種類の選択コントロールが用意されています。 詳細については、Apple OS X ヒューマン インターフェイス ガイドラインの「選択コントロール」セクションを参照してください。

Example selection controls

選択コントロールがユーザー操作を持つタイミングを追跡するには、アクションとして公開する方法が 2 つあります。 次に例を示します。

partial void SegmentButtonPressed (Foundation.NSObject sender) {
    FeedbackLabel.StringValue = string.Format("Button {0} Pressed",SegmentButtons.SelectedSegment);
}

または、デリゲートをイベントにActivatedアタッチします。 次に例を示します。

TickedSlider.Activated += (sender, e) => {
    FeedbackLabel.StringValue = string.Format("Stepper Value: {0:###}",TickedSlider.IntValue);
};

Selection コントロールの値を設定または読み取る場合は、プロパティを IntValue 使用します。 次に例を示します。

FeedbackLabel.StringValue = string.Format("Stepper Value: {0:###}",TickedSlider.IntValue);

特殊コントロール (Color Well や Image Well など) には、値型に固有のプロパティがあります。 例:

ColorWell.Color = NSColor.Red;
ImageWell.Image = NSImage.ImageNamed ("tag.png");

日付 NSDatePicker と時刻を直接操作するための次のプロパティがあります。

  • DateValue - 現在の日付と時刻の値を指定します NSDate
  • ローカル - ユーザーの場所を NSLocal.
  • TimeInterval - 時刻の値を .Double
  • TimeZone - ユーザーのタイム ゾーンを .NSTimeZone

インジケーター コントロールの操作

AppKit には、ユーザー インターフェイスデザインで使用できるいくつかの種類のインジケーター コントロールが用意されています。 詳細については、Apple OS X ヒューマン インターフェイス ガイドラインの「インジケーター コントロール」セクションを参照してください。

Example indicator controls

インジケーター コントロールがユーザー操作を持つタイミングを追跡するには、アクションまたはアウトレットとして公開し、デリゲートをイベントにアタッチするActivated方法が 2 つあります。 次に例を示します。

LevelIndicator.Activated += (sender, e) => {
    FeedbackLabel.StringValue = string.Format("Level: {0:###}",LevelIndicator.DoubleValue);
};

インジケーター コントロールの値を読み取りまたは設定するには、プロパティを DoubleValue 使用します。 次に例を示します。

FeedbackLabel.StringValue = string.Format("Rating: {0:###}",Rating.DoubleValue);

不確定および非同期の進行状況インジケーターは、表示時にアニメーション化する必要があります。 アニメーションが StartAnimation 表示されたら、このメソッドを使用してアニメーションを開始します。 次に例を示します。

Indeterminate.StartAnimation (this);
AsyncProgress.StartAnimation (this);

メソッドを StopAnimation 呼び出すと、アニメーションが停止します。

テキスト コントロールの操作

AppKit には、ユーザー インターフェイス デザインで使用できるいくつかの種類のテキスト コントロールが用意されています。 詳細については、Apple OS X ヒューマン インターフェイス ガイドラインの「テキスト コントロール」セクションを参照してください。

Example text controls

テキスト フィールド (NSTextField) の場合、次のイベントを使用してユーザーの操作を追跡できます。

  • 変更 - ユーザーがフィールドの値を変更するたびに発生します。 たとえば、入力されたすべての文字についてです。
  • EditingBegan - ユーザーが編集するフィールドを選択すると発生します。
  • EditingEnded - ユーザーがフィールドの Enter キーを押すか、フィールドを離れたとき。

このプロパティを StringValue 使用して、フィールドの値を読み取ったり設定したりします。 次に例を示します。

FeedbackLabel.StringValue = string.Format("User ID: {0}",UserField.StringValue);

数値を表示または編集するフィールドには、このプロパティを IntValue 使用できます。 次に例を示します。

FeedbackLabel.StringValue = string.Format("Number: {0}",NumberField.IntValue);

An NSTextView は、組み込みの書式設定を備えたフル機能のテキスト編集および表示領域を提供します。 同様に NSTextField、プロパティを StringValue 使用してエリアの値を読み取ったり設定したりします。

Xamarin.Mac アプリでテキスト ビューを操作する複雑な例の例については、SourceWriter サンプル アプリ参照してください。 SourceWriter は、コードの完了とシンプルな構文の強調表示をサポートするシンプルなソース コード エディターです。

SourceWriter コード全体に詳細なコメントが付いていて、可能な場合は、重要な技術やメソッド、Xamarin.Mac ガイド ドキュメントの関連情報へのリンクが示されます。

コンテンツ ビューの操作

AppKit には、ユーザー インターフェイス デザインで使用できるいくつかの種類のコンテンツ ビューが用意されています。 詳細については、Apple OS X ヒューマン インターフェイス ガイドラインの「コンテンツ ビュー」セクションを参照してください。

An example content view

ポップオーバー

ポップオーバーは、特定のコントロールまたは画面上の領域に直接関連する機能を提供する一時的な UI 要素です。 ポップオーバーは、関連するコントロールまたは領域を含むウィンドウの上に浮動し、その境界線には、表示元のポイントを示す矢印が含まれています。

ポップオーバーを作成するには、次の操作を行います。

  1. .storyboardソリューション エクスプローラーでポップオーバーをダブルクリックして、ポップオーバーを追加するウィンドウのファイルを開きます。

  2. ライブラリ インスペクターからインターフェイス エディターにビュー コントローラードラッグします

    Selecting a View Controller from the Library

  3. カスタム ビューのサイズとレイアウトを 定義します

    Editing the layout

  4. Control キーを押しながらポップアップのソースからビュー コントローラードラッグします。

    Dragging to create a segue

  5. ポップアップ メニューから [ポップオーバー] を選択します。

    Setting the segue type

  6. 変更を保存し、Visual Studio for Mac に戻って Xcode と同期します。

タブ ビュー

タブ ビューは、タブ リスト (セグメント化されたコントロールに似ています) とペインと呼ばれる ビューのセットで構成されます。 ユーザーが新しいタブを選択すると、それに関連付けられているウィンドウが表示されます。 各ペインには、独自のコントロールのセットが含まれています。

Xcode のインターフェイス ビルダーでタブ ビューを使用する場合は、属性インスペクター使用してタブの数を設定します。

Editing the number of tabs

インターフェイス階層の各タブを選択してタイトル設定し、そのペインに UI 要素を追加します

Editing the tabs in Xcode

データ バインディング AppKit コントロール

Xamarin.Mac アプリケーションでキーと値のコーディングとデータ バインディングの手法を使用すると、UI 要素を設定して操作するために記述する必要があるコードの量を大幅に減らすことができますメイン。 また、バッキング データ (データ モデル) をフロントエンド ユーザー インターフェイス (Model-View-Controller) からさらに切り離すことで、アプリケーション設計のメインメインしやすくなるという利点もあります。

キー値コーディング (KVC) は、インスタンス変数またはアクセサー メソッド () を介してプロパティにアクセスするのではなく、キー (特別に書式設定された文字列) を使用してプロパティを識別して、オブジェクトのプロパティに間接的にアクセスするためのメカニズムですget/set。 Xamarin.Mac アプリケーションでキーと値のコーディングに準拠したアクセサーを実装することで、キー値監視 (KVO)、データ バインディング、コア データ、Cocoa バインディング、スクリプト機能などの他の macOS 機能にアクセスできます。

詳細については、データ バインディングとキー値のコーディングに関するドキュメントの「Simple Data Binding」セクションを参照してください。

まとめ

この記事では、Xamarin.Mac アプリケーションでのボタン、ラベル、テキスト フィールド、チェック ボックス、セグメント化されたコントロールなどの標準的な AppKit コントロールの操作について詳しく説明しました。 Xcode のインターフェイス ビルダーでユーザー インターフェイス デザインに追加し、アウトレットとアクションを介してコードに公開し、C# コードで AppKit コントロールを操作する方法について説明しました。