Xamarin.ios의 표준 컨트롤Standard controls in Xamarin.Mac

이 문서에서는 Xamarin.ios 응용 프로그램에서 단추, 레이블, 텍스트 필드, 확인란 및 분할 된 컨트롤과 같은 표준 AppKit 컨트롤을 사용 하는 방법을 설명 합니다. Interface Builder를 사용 하 여 인터페이스에 추가 하 고 코드에서 상호 작용 하는 방법을 설명 합니다.This article covers working with the standard AppKit controls such as buttons, labels, text fields, check boxes, and segmented controls in a Xamarin.Mac application. It describes adding them to an interface with Interface Builder and interacting with them in code.

Xamarin.ios 응용 프로그램 C# 에서 및 .net을 사용 하는 경우 목표-CXcode 에서 작업 하는 개발자가 동일한 appkit 컨트롤에 액세스할 수 있습니다.When working with C# and .NET in a Xamarin.Mac application, you have access to the same AppKit Controls that a developer working in Objective-C and Xcode does. Xamarin.ios는 Xcode와 직접 통합 되므로 Xcode의 Interface Builder 를 사용 하 여 Appkit 컨트롤을 만들고 유지 관리 하거나 (필요에 따라 코드에서 C# 직접 만들 수 있습니다.)Because Xamarin.Mac integrates directly with Xcode, you can use Xcode's Interface Builder to create and maintain your Appkit Controls (or optionally create them directly in C# code).

AppKit 컨트롤은 Xamarin.ios 응용 프로그램의 사용자 인터페이스를 만드는 데 사용 되는 UI 요소입니다.AppKit Controls are the UI Elements that are used to create the User Interface of your Xamarin.Mac application. 단추, 레이블, 텍스트 필드, 확인란 및 분할 된 컨트롤과 같은 요소로 구성 되며 사용자가 조작할 때 인스턴트 작업 또는 표시 되는 결과가 발생 합니다.They consist of elements such as Buttons, Labels, Text Fields, Check Boxes and Segmented Controls and cause instant actions or visible results when a user manipulates them.

이 문서에서는 Xamarin.ios 응용 프로그램에서 AppKit 컨트롤 작업의 기본 사항을 다룹니다.In this article, we'll cover the basics of working with AppKit Controls in a Xamarin.Mac application. Hello, Mac 문서를 먼저 사용 하는 것이 가장 좋습니다. 특히 Xcode 및 Interface Builder콘센트 및 작업 섹션을 소개 하 고,에서 사용할 주요 개념 및 기술을 설명 하 고 있습니다. 이 문서를 참조 하세요.It is highly suggested that you work through the Hello, Mac article first, specifically the Introduction to Xcode and Interface Builder and Outlets and Actions sections, as it covers key concepts and techniques that we'll be using in this article.

Xamarin.ios 내부 문서의 목적에 따라 클래스/메서드 노출 C# 섹션을 살펴볼 수 있습니다. 여기에서는 C# 클래스를 목표에 연결 하는 데 사용 되는RegisterExport명령을 설명 합니다. 개체 및 UI 요소You may want to take a look at the Exposing C# classes / methods to Objective-C section of the Xamarin.Mac Internals document as well, it explains the Register and Export commands used to wire-up your C# classes to Objective-C objects and UI Elements.

컨트롤 및 뷰 소개Introduction to Controls and Views

macOS (이전의 Mac OS X)는 AppKit 프레임 워크를 통해 사용자 인터페이스 컨트롤의 표준 집합을 제공 합니다.macOS (formerly known as Mac OS X) provides a standard set of User Interface controls via the AppKit Framework. 단추, 레이블, 텍스트 필드, 확인란 및 분할 된 컨트롤과 같은 요소로 구성 되며 사용자가 조작할 때 인스턴트 작업 또는 표시 되는 결과가 발생 합니다.They consist of elements such as Buttons, Labels, Text Fields, Check Boxes and Segmented Controls and cause instant actions or visible results when a user manipulates them.

모든 AppKit 컨트롤에는 대부분의 용도에 적합 한 표준 기본 제공 모양이 있습니다. 일부 경우에는 창 프레임 영역에서 사용할 대체 모양이 나 사이드바 영역 또는 알림 센터와 같은 Vibrance 효과 컨텍스트를 지정 합니다. 위젯.All of the AppKit Controls have a standard, built-in appearance that will be appropriate for most uses, some specify an alternate appearance for use in a window frame area or in a Vibrance Effect context, such as in a Sidebar area or in a Notification Center widget.

Apple AppKit 컨트롤을 사용할 때 다음 지침을 제안 합니다.Apple suggest the following guidelines when working with AppKit Controls:

  • 동일한 뷰에서 컨트롤 크기를 혼합 하지 마세요.Avoid mixing control sizes in the same view.
  • 일반적으로 컨트롤의 크기를 세로로 조정 하지 마십시오.In general, avoid resizing controls vertically.
  • 컨트롤 내에서 시스템 글꼴과 적절 한 텍스트 크기를 사용 합니다.Use the system font and the proper text size within a control.
  • 컨트롤 사이에 적절 한 간격을 사용 합니다.Use the proper spacing between controls.

자세한 내용은 Apple의 OS X 휴먼 인터페이스 지침컨트롤 및 뷰 정보 섹션을 참조 하세요.For more information, pleas see the About Controls and Views section of Apple's OS X Human Interface Guidelines.

창 프레임에서 컨트롤 사용Using Controls in a Window Frame

Windows 프레임 영역에 포함할 수 있도록 하는 표시 스타일을 포함 하는 AppKit 컨트롤의 하위 집합이 있습니다.There are a subset of AppKit Controls that include a display style that allows them to be include in a Window's Frame area. 예를 들어 메일 응용 프로그램의 도구 모음을 참조 하세요.For an example, see the Mail app's toolbar:

  • 원형 질감 단추 -NSTexturedRoundedBezelStyle스타일의 NSButton입니다.Round Textured Button - A NSButton with a style of NSTexturedRoundedBezelStyle.
  • 분할 된 분할 된 분할 된 분할 된 컨트롤 -NSSegmentStyleTexturedRounded스타일의 NSSegmentedControl입니다.Textured Rounded Segmented Control - A NSSegmentedControl with a style of NSSegmentStyleTexturedRounded.
  • 분할 된 분할 된 분할 된 분할 된 컨트롤 -NSSegmentStyleSeparated스타일의 NSSegmentedControl입니다.Textured Rounded Segmented Control - A NSSegmentedControl with a style of NSSegmentStyleSeparated.
  • 원형 텍스처 팝업 메뉴 -NSTexturedRoundedBezelStyle스타일의 NSPopUpButton입니다.Round Textured Pop-Up Menu - A NSPopUpButton with a style of NSTexturedRoundedBezelStyle.
  • 원형 텍스처 드롭다운 메뉴 -NSTexturedRoundedBezelStyle스타일의 NSPopUpButton입니다.Round Textured Drop-Down Menu - A NSPopUpButton with a style of NSTexturedRoundedBezelStyle.
  • 검색 표시줄 -NSSearchField입니다.Search Bar - A NSSearchField.

Apple 창 프레임에서 AppKit 컨트롤을 사용할 때 다음 지침을 제안 합니다.Apple suggest the following guidelines when working with AppKit Controls in a Window Frame:

  • 창 본문에서 창 프레임 특정 컨트롤 스타일을 사용 하지 않습니다.Don’t use Window Frame specific control styles in the Window Body.
  • 창 프레임에서 창 본문 컨트롤이 나 스타일을 사용 하지 않습니다.Don’t use Window Body controls or styles in the Window Frame.

자세한 내용은 Apple의 OS X 휴먼 인터페이스 지침컨트롤 및 뷰 정보 섹션을 참조 하세요.For more information, pleas see the About Controls and Views section of Apple's OS X Human Interface Guidelines.

Interface Builder에서 사용자 인터페이스 만들기Creating a User Interface in Interface Builder

새 Xamarin.ios Cocoa 응용 프로그램을 만들면 기본적으로 표준 빈 창이 표시 됩니다.When you create a new Xamarin.Mac Cocoa application, you get a standard blank, window by default. 이 창은 프로젝트에 자동으로 포함 되는 .storyboard 파일에 정의 됩니다.This windows is defined in a .storyboard file automatically included in the project. Windows 디자인을 편집 하려면 솔루션 탐색기에서 Main.storyboard 파일을 두 번 클릭 합니다.To edit your windows design, in the Solution Explorer, double click the Main.storyboard file:

이렇게 하면 Xcode의 Interface Builder에서 창 디자인이 열립니다.This will open the window design in Xcode's Interface Builder:

사용자 인터페이스를 만들려면 라이브러리 검사기 에서 UI 요소 (Appkit 컨트롤)를 Interface Builder의 인터페이스 편집기 로 끌어 옵니다.To create your User Interface, you'll drag UI Elements (AppKit Controls) from the Library Inspector to the Interface Editor in Interface Builder. 아래 예제에서는 세로 분할 뷰 컨트롤이 라이브러리 검사자 에서 마약 적용 되 고 인터페이스 편집기의 창에 배치 되었습니다.In the example below, a Vertical Split View control has been drug from the Library Inspector and placed on the Window in the Interface Editor:

Interface Builder에서 사용자 인터페이스를 만드는 방법에 대 한 자세한 내용은 Xcode 및 Interface Builder 소개 문서를 참조 하세요.For more information on creating a User Interface in Interface Builder, please see our Introduction to Xcode and Interface Builder documentation.

크기 조정 및 위치 지정Sizing and Positioning

컨트롤이 사용자 인터페이스에 포함 된 후에는 제약 조건 편집기 를 사용 하 여 값을 수동으로 입력 하 여 위치와 크기를 설정 하 고 부모 창이 나 뷰의 크기를 조정할 때 컨트롤의 위치와 크기를 자동으로 조정 하는 방법을 제어 합니다.Once a control has been included in the User Interface, use the Constraint editor to set its location and size by entering values manually and control how the control is automatically positioned and sized when the parent Window or View is resized:

Autoresizing 상자 외부의 빨간색 빔 을 사용 하 여 지정 된 (x, y) 위치에 컨트롤을 고정 합니다.Use the Red I-Beams around the outside of the Autoresizing box to stick a control to a given (x,y) location. 예를 들면,For example:

계층 구조 뷰 & 인터페이스 편집기에서 선택한 컨트롤이 크기 조정 또는 이동 시 창이 나 뷰의 위쪽 및 오른쪽 위치에 멈춰 있음을 지정 합니다.Specifies that the selected control (in the Hierarchy View & Interface Editor) will be stuck to the top and right location of the Window or View as it is resized or moved.

높이 및 너비와 같은 편집기 컨트롤 속성의 다른 요소:Other elements of the editor control properties such as Height and Width:

맞춤 편집기를 사용 하 여 제약 조건이 있는 요소의 맞춤을 제어할 수도 있습니다.You can also control the alignment of elements with constraints using the Alignment Editor:

중요

IOS와 달리 (0, 0)은 화면의 왼쪽 위 모퉁이가 고 macOS (0, 0)는 왼쪽 아래 모퉁이입니다.Unlike iOS where (0,0) is the upper left hand corner of the screen, in macOS (0,0) is the lower left hand corner. MacOS는 숫자 값이 위쪽 및 오른쪽으로 증가 하는 수치 좌표 시스템을 사용 하기 때문입니다.This is because macOS uses a mathematical coordinate system with the number values increasing in value upward and to the right. 사용자 인터페이스에 AppKit 컨트롤을 배치할 때이를 고려해 야 합니다.You need to take this into consideration when placing AppKit controls on a User Interface.

사용자 지정 클래스 설정Setting a Custom Class

AppKit 컨트롤을 사용 하 여 작업 하 고 기존 컨트롤을 서브클래싱하 며 해당 클래스의 사용자 지정 버전을 만들어야 하는 경우가 있습니다.There are times when working with AppKit Controls that you will need to subclass and existing control and create you own custom version of that class. 예를 들어, 원본 목록의 사용자 지정 버전을 정의 합니다.For example, defining a custom version of the Source List:

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")] 명령은 SourceListView 클래스를 목표 C에 노출 하므로를 Interface Builder에서 사용할 수 있습니다.Where the [Register("SourceListView")] instruction exposes the SourceListView class to Objective-C so that is can be used in Interface Builder. 자세한 내용은 Xamarin.ios 내부 문서의 클래스/메서드 C# 를 목표에 노출-c 섹션을 참조 하세요 . 이 문서에서는 C# 클래스를 목표에 연결 하는 데 사용 되는RegisterExport명령을 설명 합니다. 개체 및 UI 요소For more information, please see the Exposing C# classes / methods to Objective-C section of the Xamarin.Mac Internals document, it explains the Register and Export commands used to wire-up your C# classes to Objective-C objects and UI Elements.

위의 코드를 사용 하 여 확장 하는 기본 형식의 AppKit 컨트롤을 디자인 화면으로 끌어 올 수 있습니다 (아래 예제에서는 원본 목록). Identity Inspector 로 전환 하 고 사용자 지정 클래스 를 목표에 노출 되었습니다 (예: SourceListView).With the above code in place, you can drag an AppKit Control, of the base type that you are extending, onto the design surface (in the example below, a Source List), switch to the Identity Inspector and set the Custom Class to the name that you exposed to Objective-C (example SourceListView):

콘센트 및 작업 노출Exposing Outlets and Actions

AppKit 컨트롤을 코드에서 C# 액세스 하려면 먼저 콘센트 또는 및 작업으로 노출 해야 합니다.Before an AppKit Control can be accessed in C# code, it needs to be exposed as either an Outlet or and Action. 이렇게 하려면 인터페이스 계층 구조 또는 인터페이스 편집기 에서 지정 된 컨트롤을 선택 하 고 길잡이 뷰로 전환 합니다 (편집용으로 창의 .h을 선택 했는지 확인).To do this select the given control in either the Interface Hierarchy or the Interface Editor and switch to the Assistant View (ensure that you have the .h of your Window selected for editing):

제어-AppKit 컨트롤에서 .h 파일 제공으로 끌어 콘센트 또는 작업만들기를 시작 합니다.Control-drag from the AppKit control onto the give .h file to start creating an Outlet or Action:

만들 노출 유형을 선택 하 고 콘센트가작업이름을지정 합니다.Select the type of exposure to create and give the Outlet or Action a Name:

콘센트작업으로 작업 하는 방법에 대 한 자세한 내용은 Xcode 및 Interface Builder 소개 설명서의 콘센트 및 작업 섹션을 참조 하세요.For more information on working with Outlets and Actions, please see the Outlets and Actions section of our Introduction to Xcode and Interface Builder documentation.

Xcode와 변경 내용 동기화Synchronizing Changes with Xcode

Xcode에서 Mac용 Visual Studio로 다시 전환 하면 Xcode에서 변경한 내용이 자동으로 Xamarin.ios 프로젝트와 동기화 됩니다.When you switch back to Visual Studio for Mac from Xcode, any changes that you have made in Xcode will automatically be synchronized with your Xamarin.Mac project.

솔루션 탐색기 에서 SplitViewController.designer.cs를 선택 하는 경우 C# 코드에서 유출동작이 어떻게 연결 되었는지 확인할 수 있습니다.If you select the SplitViewController.designer.cs in the Solution Explorer you'll be able to see how your Outlet and Action have been wired up in our C# code:

SplitViewController.designer.cs 파일의 정의가 다음과 같이 표시 되는지 확인 합니다.Notice how the definition in the SplitViewController.designer.cs file:

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

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

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

Xcode의 MainWindow.h 파일에서 정의를 사용 하 여 줄을 설정 합니다.Line up with the definition in the MainWindow.h file in Xcode:

@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;

여기에서 볼 수 있듯이 Mac용 Visual Studio는 .h 파일에 대 한 변경 내용을 수신 하 고 각 .designer.cs 파일의 변경 내용을 자동으로 동기화 하 여 응용 프로그램에 노출 합니다.As you can see, Visual Studio for Mac listens for changes to the .h file, and then automatically synchronizes those changes in the respective .designer.cs file to expose them to your application. SplitViewController.designer.cs partial 클래스 이므로 Mac용 Visual Studio는 클래스에 대 한 모든 변경 내용을 덮어쓰는 SplitViewController.cs를 수정할 필요가 없습니다.You may also notice that SplitViewController.designer.cs is a partial class, so that Visual Studio for Mac doesn't have to modify SplitViewController.cs which would overwrite any changes that we have made to the class.

일반적으로 SplitViewController.designer.cs를 직접 열 필요가 없습니다. 여기에는 교육용 으로만 제공 됩니다.You normally will never need to open the SplitViewController.designer.cs yourself, it was presented here for educational purposes only.

중요

대부분의 경우 Mac용 Visual Studio는 Xcode에서 변경 된 내용을 자동으로 확인 하 고 Xamarin.ios 프로젝트와 동기화 합니다.In most situations, Visual Studio for Mac will automatically see any changes made in Xcode and sync them to your Xamarin.Mac project. 동기화가 자동으로 수행되지 않는 경우 Xcode로 돌아가서 다시 Mac용 Visual Studio로 돌아갑니다.In the off occurrence that synchronization doesn't automatically happen, switch back to Xcode and them back to Visual Studio for Mac again. 대부분 이렇게 하면 동기화 주기가 시작됩니다.This will normally kick off a synchronization cycle.

단추 작업Working with Buttons

AppKit는 사용자 인터페이스 디자인에 사용할 수 있는 여러 유형의 단추를 제공 합니다.AppKit provides several types of button that can be used in your User Interface Design. 자세한 내용은 Apple의 OS X 휴먼 인터페이스 지침단추 섹션을 참조 하세요.For more information, please see the Buttons section of Apple's OS X Human Interface Guidelines.

콘센트를 통해 단추를 표시 한 경우 다음 코드는 눌러져 있는 것에 응답 합니다.If a button has been exposed via an Outlet, the following code will respond to it being pressed:

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

작업을 통해 노출 된 단추의 경우 Xcode에서 사용자가 선택한 이름을 사용 하 여 자동으로 public partial 메서드가 생성 됩니다.For buttons that have been exposed via Actions, a public partial method will automatically be created for you with the name that you chose in Xcode. 작업에 응답 하려면 동작이 정의 된 클래스에서 부분 메서드를 완료 합니다.To respond to the Action, complete the partial method in the class that the Action was defined on. 예를 들면,For example:

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

상태 (예: 설정해제)가 있는 단추의 경우 상태를 확인 하거나 NSCellStateValue 열거형에 대해 State 속성을 사용 하 여 설정할 수 있습니다.For buttons that have a state (like On and Off), the state can be checked or set with the State property against the NSCellStateValue enum. 예를 들면,For example:

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

NSCellStateValue은 다음과 같습니다.Where NSCellStateValue can be:

  • On -단추가 푸시되 고 컨트롤이 선택 됩니다 (예: 확인란 체크 상자).On - The button is pushed or the control is selected (such as a check in a Check Box).
  • Off -단추가 푸시되 지 않거나 컨트롤이 선택 되지 않았습니다.Off - The button is not pushed or the control is not selected.
  • Mixed - 설정해제 상태의 조합입니다.Mixed - A mixture of On and Off states.

단추를 기본값으로 표시 및 동일한 키 설정Mark a Button as Default and Set Key Equivalent

사용자 인터페이스 디자인에 추가한 모든 단추에 대해 키보드에서 Return/Enter 키를 누를 때 활성화 되는 기본 단추로 해당 단추를 표시할 수 있습니다.For any button that you have added to a user interface design, you can mark that button as the Default button that will be activated when the user presses the Return/Enter key on the keyboard. MacOS에서이 단추는 기본적으로 파란색 배경색을 받습니다.In macOS, this button will receive a blue background color by default.

단추를 기본값으로 설정 하려면 Xcode의 Interface Builder에서 선택 합니다.To set a button as default, select it in Xcode's Interface Builder. 그런 다음, 특성 검사자에서 키에 해당 하 는 필드를 선택 하 고 Return/enter 키를 누릅니다.Next, in the Attribute Inspector, select the Key Equivalent field and press the Return/Enter key:

마찬가지로 마우스 대신 키보드를 사용 하 여 단추를 활성화 하는 데 사용할 수 있는 키 시퀀스를 할당할 수 있습니다.Equally, you can assign any key sequence that can be used to activate the button using the keyboard instead of the mouse. 예를 들어 위의 이미지에서 Command-C 키를 누릅니다.For example, by pressing the Command-C keys in the image above.

앱이 실행 되 고 단추가 있는 창이 키 이며 포커스가 있는 경우 사용자가 단추를 누르면 단추에 대 한 작업이 활성화 됩니다 (사용자가 단추를 클릭 한 경우).When the app is run and the Window with the Button is Key and Focused, if the user presses Command-C, the Action for the button will be activated (as-if the user had clicked on the button).

확인란 및 라디오 단추 작업Working with Checkboxes and Radio Buttons

AppKit는 사용자 인터페이스 디자인에 사용할 수 있는 여러 유형의 확인란 및 라디오 단추 그룹을 제공 합니다.AppKit provides several types of Checkboxes and Radio Button Groups that can be used in your User Interface Design. 자세한 내용은 Apple의 OS X 휴먼 인터페이스 지침단추 섹션을 참조 하세요.For more information, please see the Buttons section of Apple's OS X Human Interface Guidelines.

확인란 및 라디오 단추 ( 콘센트를 통해 노출 됨)의 상태 (예: 설정해제)를 사용 하 여 상태를 확인 하거나 NSCellStateValue 열거형에 대해 State 속성을 사용 하 여 설정할 수 있습니다.Checkboxes and Radio Buttons (exposed via Outlets) have a state (like On and Off), the state can be checked or set with the State property against the NSCellStateValue enum. 예를 들면,For example:

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

NSCellStateValue은 다음과 같습니다.Where NSCellStateValue can be:

  • On -단추가 푸시되 고 컨트롤이 선택 됩니다 (예: 확인란 체크 상자).On - The button is pushed or the control is selected (such as a check in a Check Box).
  • Off -단추가 푸시되 지 않거나 컨트롤이 선택 되지 않았습니다.Off - The button is not pushed or the control is not selected.
  • Mixed - 설정해제 상태의 조합입니다.Mixed - A mixture of On and Off states.

라디오 단추 그룹에서 단추를 선택 하려면 라디오 단추를 표시 하 여 콘센트 를 선택 하 고 해당 State 속성을 설정 합니다.To select a button in a Radio Button Group, expose the Radio Button to select as an Outlet and set its State property. 예를 들면 다음과 같습니다.For Example:

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

그룹 역할을 하는 라디오 단추의 컬렉션을 가져오고 선택 된 상태를 자동으로 처리 하려면 새 작업 을 만들고 그룹의 모든 단추를 연결 합니다.To get a collection of radio buttons to act as a group and automatically handle the selected state, create a new Action and attach every button in the group to it:

그런 다음 특성 검사자에서 각 라디오 단추에 고유한 Tag를 할당 합니다.Next, assign a unique Tag to each radio button in the Attribute Inspector:

변경 내용을 저장 하 고 Mac용 Visual Studio로 돌아가서 모든 라디오 단추가 연결 된 작업 을 처리 하는 코드를 추가 합니다.Save your changes and return to Visual Studio for Mac, add the code to handle the Action that all of the radio buttons are attached to:

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

Tag 속성을 사용 하 여 선택한 라디오 단추를 확인할 수 있습니다.You can use the Tag property to see which radio button was selected.

메뉴 컨트롤 작업Working with Menu Controls

AppKit는 사용자 인터페이스 디자인에 사용할 수 있는 여러 가지 유형의 메뉴 컨트롤을 제공 합니다.AppKit provides several types of Menu Controls that can be used in your User Interface Design. 자세한 내용은 Apple OS X 휴먼 인터페이스 지침메뉴 컨트롤 섹션을 참조 하세요.For more information, please see the Menu Controls section of Apple's OS X Human Interface Guidelines.

메뉴 컨트롤 데이터 제공Providing Menu Control Data

MacOS에서 사용할 수 있는 메뉴 컨트롤은 내부 목록 (Interface Builder에서 미리 정의 되거나 코드를 통해 채워질 수 있음) 또는 고유한 사용자 지정 외부 데이터 원본을 제공 하 여 드롭다운 목록을 채우도록 설정할 수 있습니다.The Menu Controls available to macOS can be set to populate the dropdown list either from an internal list (that can be pre-defined in Interface Builder or populated via code) or by providing your own custom, external data source.

내부 데이터 작업Working with Internal Data

Interface Builder에서 항목을 정의 하는 것 외에도 메뉴 컨트롤 (NSComboBox)은 유지 관리 하는 내부 목록에서 항목을 추가, 편집 또는 삭제할 수 있는 전체 메서드 집합을 제공 합니다.In addition to defining items in Interface Builder, Menu Controls (such as NSComboBox), provide a complete set of methods that allow you to Add, Edit or Delete the items from the internal list that they maintain:

  • Add-목록의 끝에 새 항목을 추가 합니다.Add - Adds a new item to the end of the list.
  • GetItem-지정 된 인덱스에 있는 항목을 반환 합니다.GetItem - Returns the item at the given index.
  • Insert-목록의 지정 된 위치에 새 항목을 삽입 합니다.Insert - Inserts a new item in the list at the given location.
  • IndexOf-지정 된 항목의 인덱스를 반환 합니다.IndexOf - Returns the index of the given item.
  • Remove-목록에서 지정 된 항목을 제거 합니다.Remove - Removes the given item from the list.
  • RemoveAll-목록에서 모든 항목을 제거 합니다.RemoveAll - Removes all items from the list.
  • RemoveAt-지정 된 인덱스에서 항목을 제거 합니다.RemoveAt - Removes the item at the given index.
  • Count-목록의 항목 수를 반환 합니다.Count - Returns the number of items in the list.

중요

Extern 데이터 소스 (UsesDataSource = true)를 사용 하는 경우 위의 메서드를 호출 하면 예외가 throw 됩니다.If you are using an Extern Data Source (UsesDataSource = true), calling any of the above methods will throw an exception.

외부 데이터 원본 작업Working with an External Data Source

기본 제공 내부 데이터를 사용 하 여 메뉴 컨트롤에 대 한 행을 제공 하는 대신 필요에 따라 외부 데이터 원본을 사용 하 고 항목에 대 한 고유한 백업 저장소 (예: SQLite 데이터베이스)를 제공할 수 있습니다.Instead of using the built-in Internal Data to provide the rows for your Menu Control, you can optionally use an External Data Source and provide your own backing store for the items (such as a SQLite database).

외부 데이터 원본으로 작업 하려면 메뉴 컨트롤의 데이터 소스 (예:NSComboBoxDataSource) 인스턴스를 만들고 여러 메서드를 재정의 하 여 필요한 데이터를 제공 합니다.To work with an External Data Source, you'll create an instance of the Menu Control's Data Source (NSComboBoxDataSource for example) and override several methods to provide the necessary data:

  • ItemCount-목록의 항목 수를 반환 합니다.ItemCount - Returns the number of items in the list.
  • ObjectValueForItem-지정 된 인덱스에 대 한 항목의 값을 반환 합니다.ObjectValueForItem - Returns the value of the item for a given index.
  • IndexOfItem-항목 값 제공에 대 한 인덱스를 반환 합니다.IndexOfItem - Returns the index for the give item value.
  • CompletedString-부분적으로 형식화 된 항목 값에 대해 일치 하는 첫 번째 항목 값을 반환 합니다.CompletedString - Returns the first matching item value for the partially typed item value. 이 메서드는 자동 완성 기능을 사용 하도록 설정한 경우에만 호출 됩니다 (Completes = true).This method is only called if Autocomplete has been enabled (Completes = true).

자세한 내용은 데이터베이스 작업 문서의 데이터베이스 및 ComboBoxes 섹션을 참조 하세요.Please see the Databases and ComboBoxes section of the Working with Databases document for more details.

목록의 모양 조정Adjusting the List's Appearance

다음 메서드를 사용 하 여 메뉴 컨트롤의 모양을 조정할 수 있습니다.The following methods are available to adjust the Menu Control's appearance:

  • HasVerticalScroller-true이면 컨트롤에 세로 스크롤 막대가 표시 됩니다.HasVerticalScroller - If true, the control will display a vertical scrollbar.
  • VisibleItems-컨트롤을 열 때 표시 되는 항목 수를 조정 합니다.VisibleItems - Adjust the number of items displayed when the control is opened. 기본값은 5입니다.The default value is five (5).
  • NSSize를 제공 하 여 지정 된 항목 주위의 공간 크기를 조정 합니다 .이 경우 Width에서 왼쪽과 오른쪽 여백을 지정 하 고 Height는 항목 앞뒤의 공백을 지정 합니다. IntercellSpacingIntercellSpacing - Adjust the amount of space around a given item by providing a NSSize where the Width specifies the left and right margins and the Height specifies the space before and after an item.
  • ItemHeight-목록에서 각 항목의 높이를 지정 합니다.ItemHeight - Specifies the height of each item in the list.

NSPopupButtons드롭다운 형식의 경우 첫 번째 메뉴 항목이 컨트롤의 제목을 제공 합니다.For Drop-Down types of NSPopupButtons, the first Menu Item provides the title for the control. 예를 들면 다음과 같습니다.For Example:

제목을 변경 하려면이 항목을 콘센트 로 노출 하 고 다음과 같은 코드를 사용 합니다.To change the title, expose this item as an Outlet and use code like the following:

DropDownSelected.Title = "Item 1";

선택한 항목 조작Manipulating the Selected Items

다음 메서드 및 속성을 사용 하 여 메뉴 컨트롤의 목록에서 선택한 항목을 조작할 수 있습니다.The following methods and properties allow you to manipulate the selected items in the Menu Control's list:

  • SelectItem-지정 된 인덱스에서 항목을 선택 합니다.SelectItem - Selects the item at the given index.
  • Select-지정 된 항목 값을 선택 합니다.Select - Select the given item value.
  • 지정 된 인덱스에서 항목을 DeselectItem 선택 취소 합니다.DeselectItem - Deselects the item at the given index.
  • SelectedIndex-현재 선택 된 항목의 인덱스를 반환 합니다.SelectedIndex - Returns the index of the currently selected item.
  • SelectedValue-현재 선택 된 항목의 값을 반환 합니다.SelectedValue - Returns the value of the currently selected item.

ScrollItemAtIndexToTop를 사용 하 여 지정 된 인덱스의 항목이 표시 될 때까지 목록 맨 위에 있는 지정 된 인덱스에 항목을 표시 하 고 목록으로 스크롤할 ScrollItemAtIndexToVisible를 표시 합니다.Use the ScrollItemAtIndexToTop to present the item at the given index at the top of the list and the ScrollItemAtIndexToVisible to scroll to list until the item at the given index is visible.

이벤트에 응답Responding to Events

메뉴 컨트롤은 사용자 상호 작용에 응답 하는 다음과 같은 이벤트를 제공 합니다.Menu Controls provide the following events to respond to user interaction:

  • SelectionChanged-사용자가 목록에서 값을 선택 하면 호출 됩니다.SelectionChanged - Is called when the user has selected a value from the list.
  • SelectionIsChanging-새 사용자가 선택한 항목이 활성 선택이 되기 전에 호출 됩니다.SelectionIsChanging - Is called before the new user selected item becomes the active selection.
  • WillPopup-드롭다운 항목 목록이 표시 되기 전에 호출 됩니다.WillPopup - Is called before the dropdown list of items is displayed.
  • WillDismiss-항목의 드롭다운 목록을 닫기 전에 호출 됩니다.WillDismiss - Is called before the dropdown list of items is closed.

NSComboBox 컨트롤의 경우 사용자가 콤보 상자의 텍스트 값을 편집할 때마다 호출 되는 Changed 이벤트와 같은 NSTextField와 동일한 이벤트를 모두 포함 합니다.For NSComboBox controls, they include all of the same events as the NSTextField, such as the Changed event that is called whenever the user edits the value of the text in the Combo Box.

필요에 따라 작업 에 항목을 연결 하 여 선택 하는 Interface Builder에 정의 된 내부 데이터 메뉴 항목에 응답 하 고 다음과 같은 코드를 사용 하 여 사용자가 트리거하는 작업 에 응답할 수 있습니다.Optionally, you can respond the a Internal Data Menu Items defined in Interface Builder being selected by attaching the item to an Action and use code like the following to respond to Action being triggered by the user:

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

메뉴 및 메뉴 컨트롤을 사용 하는 방법에 대 한 자세한 내용은 메뉴팝업 단추와 풀 다운 목록 설명서를 참조 하세요.For more information on working with Menus and Menu Controls, please see our Menus and Pop-up Button and Pull-Down Lists documentation.

선택 컨트롤 작업Working with Selection Controls

AppKit는 사용자 인터페이스 디자인에 사용할 수 있는 여러 가지 유형의 선택 컨트롤을 제공 합니다.AppKit provides several types of Selection Controls that can be used in your User Interface Design. 자세한 내용은 Apple OS X 휴먼 인터페이스 지침선택 컨트롤 섹션을 참조 하세요.For more information, please see the Selection Controls section of Apple's OS X Human Interface Guidelines.

선택 컨트롤에 사용자 상호 작용이 있는 경우를 동작으로 노출 하 여이를 추적 하는 방법에는 두 가지가 있습니다.There are two ways to track when a Selection Control has user interaction, by exposing it as an Action. 예를 들면,For example:

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

또는 Activated 이벤트에 대리자 를 연결 합니다.Or by attaching a Delegate to the Activated event. 예를 들면,For example:

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

선택 컨트롤의 값을 설정 하거나 읽으려면 IntValue 속성을 사용 합니다.To set or read the value of a Selection Control, use the IntValue property. 예를 들면,For example:

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

전문 컨트롤 (예: 색 웰 및 이미지 웰)에는 해당 값 형식에 대 한 특정 속성이 있습니다.The specialty controls (such as Color Well and Image Well) have specific properties for their value types. 예를 들면 다음과 같습니다.For Example:

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

NSDatePicker에는 날짜 및 시간을 직접 사용 하기 위한 다음과 같은 속성이 있습니다.The NSDatePicker has the following properties for working directly with Date and Time:

  • DateValue -현재 날짜 및 시간 값 NSDate입니다.DateValue - The current date and time value as a NSDate.
  • Local -사용자의 위치를 NSLocal합니다.Local - The user's location as a NSLocal.
  • Timeinterval -Double시간 값입니다.TimeInterval - The time value as a Double.
  • TimeZone -NSTimeZone사용자의 표준 시간대입니다.TimeZone - The user's time zone as a NSTimeZone.

표시기 컨트롤 작업Working with Indicator Controls

AppKit는 사용자 인터페이스 디자인에 사용할 수 있는 여러 유형의 표시기 컨트롤을 제공 합니다.AppKit provides several types of Indicator Controls that can be used in your User Interface Design. 자세한 내용은 Apple OS X 휴먼 인터페이스 지침지표 컨트롤 섹션을 참조 하세요.For more information, please see the Indicator Controls section of Apple's OS X Human Interface Guidelines.

표시기 컨트롤이 사용자 상호 작용을 수행 하는 시기를 추적 하는 방법에는 두 가지가 있습니다. 즉, 작업 또는 콘센트 로 노출 하 고 Activated 이벤트에 대리자 를 연결 합니다.There are two ways to track when a Indicator Control has user interaction, either by exposing it as an Action or an Outlet and attaching a Delegate to the Activated event. 예를 들면,For example:

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

표시기 컨트롤의 값을 읽거나 설정 하려면 DoubleValue 속성을 사용 합니다.To read or set the value of the Indicator Control, use the DoubleValue property. 예를 들면,For example:

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

표시 되지 않는 경우 미정 및 비동기 진행률 표시기를 애니메이션으로 적용 해야 합니다.The Indeterminate and Asynchronous Progress Indicators should be animated when displayed. StartAnimation 메서드를 사용 하 여 애니메이션이 표시 될 때 애니메이션을 시작 합니다.Use the StartAnimation method to start the animation when they are displayed. 예를 들면,For example:

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

StopAnimation 메서드를 호출 하면 애니메이션이 중지 됩니다.Calling the StopAnimation method will stop the animation.

텍스트 컨트롤 작업Working with Text Controls

AppKit는 사용자 인터페이스 디자인에 사용할 수 있는 여러 형식의 텍스트 컨트롤을 제공 합니다.AppKit provides several types of Text Controls that can be used in your User Interface Design. 자세한 내용은 Apple OS X 휴먼 인터페이스 지침Text Controls 섹션을 참조 하세요.For more information, please see the Text Controls section of Apple's OS X Human Interface Guidelines.

텍스트 필드 (NSTextField)의 경우 다음 이벤트를 사용 하 여 사용자 상호 작용을 추적할 수 있습니다.For Text Fields (NSTextField), the following events can be used to track user interaction:

  • 변경 됨 -사용자가 필드 값을 변경할 때마다 발생 합니다.Changed - Is fired any time the user changes the value of the field. 예를 들어, 모든 문자를 입력 합니다.For example, on every character typed.
  • EditingBegan -사용자가 편집할 필드를 선택 하면 발생 합니다.EditingBegan - Is fired when the user selects the field for editing.
  • EditingEnded -사용자가 필드에서 Enter 키를 누르거나 필드를 벗어날 때EditingEnded - When the user presses the Enter key in the field or leaves the field.

StringValue 속성을 사용 하 여 필드의 값을 읽거나 설정 합니다.Use the StringValue property to read or set the field's value. 예를 들면,For example:

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

숫자 값을 표시 하거나 편집 하는 필드의 경우 IntValue 속성을 사용할 수 있습니다.For fields that display or edit numerical values, you can use the IntValue property. 예를 들면,For example:

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

NSTextView은 기본 제공 서식 지정이 포함 된 완전 한 기능을 갖춘 텍스트 편집 및 표시 영역을 제공 합니다.An NSTextView provides a full featured text edit and display area with built-in formatting. NSTextField와 마찬가지로 StringValue 속성을 사용 하 여 영역의 값을 읽거나 설정 합니다.Like a NSTextField, use the StringValue property to read or set the area's value.

Xamarin.ios 앱에서 텍스트 보기를 사용 하는 복잡 한 예제에 대 한 예제는 Sourcewriter 샘플 앱을 참조 하세요.For an example of a complex example of working with Text Views in a Xamarin.Mac app, please see the SourceWriter Sample App. SourceWriter는 코드 완성 및 간단한 구문 강조 기능을 제공하는 간단한 소스 코드 편집기입니다.SourceWriter is a simple source code editor that provides support for code completion and simple syntax highlighting.

SourceWriter 코드는 완벽하게 주석 처리되어 있으며, 가능한 경우 Xamarin.Mac 지침 설명서에 핵심 기술 또는 메서드부터 관련 정보까지 다양한 링크가 제공됩니다.The SourceWriter code has been fully commented and, where available, links have be provided from key technologies or methods to relevant information in the Xamarin.Mac Guides Documentation.

콘텐츠 뷰 작업Working with Content Views

AppKit는 사용자 인터페이스 디자인에 사용할 수 있는 여러 유형의 콘텐츠 보기를 제공 합니다.AppKit provides several types of Content Views that can be used in your User Interface Design. 자세한 내용은 Apple OS X 휴먼 인터페이스 지침콘텐츠 보기 섹션을 참조 하세요.For more information, please see the Content Views section of Apple's OS X Human Interface Guidelines.

PopoversPopovers

팝 오버은 특정 컨트롤 또는 화면 영역과 직접 관련 된 기능을 제공 하는 임시 UI 요소입니다.A popover is a transient UI element that provides functionality that is directly related to a specific a control or an onscreen area. 창 위에 있는 팝 오버 float는 관련 된 컨트롤이 나 영역을 포함 하 고 해당 테두리에는 표시 되는 점을 나타내는 화살표가 포함 됩니다.A popover floats above the window that contains the control or area that it’s related to, and its border includes an arrow to indicate the point from which it emerged.

팝 오버을 만들려면 다음을 수행 합니다.To create a popover, do the following:

  1. 팝 오버를 추가 하려는 창의 .storyboard 파일을 두 번 클릭 하 여 엽니다 솔루션 탐색기Open the .storyboard file of the window that you want to add a popover to by double-clicking it in the Solution Explorer

  2. 라이브러리 검사기뷰 컨트롤러인터페이스 편집기로 끌어 옵니다.Drag a View Controller from the Library Inspector onto the Interface Editor:

  3. 사용자 지정 보기의 크기와 레이아웃을 정의 합니다.Define the size and the layout of the Custom View:

  4. 컨트롤을 클릭 하 고 팝업 소스에서 뷰 컨트롤러로끕니다.Control-click and drag from the source of the popup onto the View Controller:

  5. 팝업 메뉴에서 팝 오버 를 선택 합니다.Select Popover from the popup menu:

  6. 변경 내용을 저장 하 고 Xcode와 동기화 할 Mac용 Visual Studio로 돌아갑니다.Save your changes and return to Visual Studio for Mac to sync with Xcode.

탭 뷰Tab Views

탭 뷰는 _창_이라고 하는 뷰 집합과 결합 된 탭 목록 (분할 된 컨트롤과 유사 함)으로 구성 됩니다.Tab Views consists of a Tab List (which looks similar to a Segmented Control) combined with a set of views that are called Panes. 사용자가 새 탭을 선택 하면 해당 탭에 연결 된 창이 표시 됩니다.When the user selects a new Tab, the Pane that is attached to it will be displayed. 각 창에는 고유한 컨트롤 집합이 포함 되어 있습니다.Each Pane contains its own set of controls.

Xcode의 Interface Builder에서 탭 뷰로 작업 하는 경우 특성 검사자 를 사용 하 여 탭 수를 설정 합니다.When working with a Tab View in Xcode's Interface Builder, use the Attribute Inspector to set the number of Tabs:

인터페이스 계층 구조 에서 각 탭을 선택 하 여 제목을 설정 하 고 UI 요소를 해당 에 추가 합니다.Select each Tab in the Interface Hierarchy to set its Title and add UI Elements to its Pane:

데이터 바인딩 AppKit 컨트롤Data Binding AppKit Controls

Xamarin.ios 응용 프로그램에서 키-값 코딩 및 데이터 바인딩 기술을 사용 하 여 UI 요소를 채우고 사용 하기 위해 작성 하 고 유지 관리 해야 하는 코드의 양을 크게 줄일 수 있습니다.By using Key-Value Coding and Data Binding techniques in your Xamarin.Mac application, you can greatly decrease the amount of code that you have to write and maintain to populate and work with UI elements. 또한 프런트 엔드 사용자 인터페이스 (모델-뷰-컨트롤러)에서 지원 데이터 (데이터 모델)를 추가로 분리 하 여 더 쉽게 유지 관리 하 고 더욱 유연한 응용 프로그램을 디자인할 수 있는 이점을 누릴 수 있습니다.You also have the benefit of further decoupling your backing data (Data Model) from your front end User Interface (Model-View-Controller), leading to easier to maintain, more flexible application design.

KVC (키-값 코딩)는 키 (특별히 서식이 지정 된 문자열)를 사용 하 여 개체의 속성에 간접적으로 액세스 하 고 인스턴스 변수 또는 접근자 메서드 (get/set)를 통해 액세스 하는 대신 속성을 식별 하는 메커니즘입니다.Key-Value Coding (KVC) is a mechanism for accessing an object’s properties indirectly, using keys (specially formatted strings) to identify properties instead of accessing them through instance variables or accessor methods (get/set). Xamarin.ios 응용 프로그램에서 키-값 코딩 규격 접근자를 구현 하 여 키-값 관찰 (KVO), 데이터 바인딩, 코어 데이터, Cocoa 바인딩, scriptability 등의 다른 macOS 기능에 액세스할 수 있습니다.By implementing Key-Value Coding compliant accessors in your Xamarin.Mac application, you gain access to other macOS features such as Key-Value Observing (KVO), Data Binding, Core Data, Cocoa bindings, and scriptability.

자세한 내용은 데이터 바인딩 및 키-값 코딩 설명서의 단순 데이터 바인딩 섹션을 참조 하세요.For more information, please see the Simple Data Binding section of our Data Binding and Key-Value Coding documentation.

요약Summary

이 문서에서는 Xamarin.ios 응용 프로그램에서 단추, 레이블, 텍스트 필드, 확인란 및 분할 된 컨트롤과 같은 표준 AppKit 컨트롤을 사용 하는 방법에 대해 자세히 살펴봅니다.This article has taken a detailed look at working with the standard AppKit controls such as Buttons, Labels, Text Fields, Check Boxes and Segmented Controls in a Xamarin.Mac application. Xcode의 Interface Builder에서 사용자 인터페이스 디자인에 추가 하 여 콘센트 및 작업을 통해 코드에 표시 하 고 코드에서 C# Appkit 컨트롤을 사용 하는 방법에 대해 설명 했습니다.It covered adding them to a User Interface Design in Xcode's Interface Builder, exposing them to code through Outlets and Actions and working with AppKit Controls in C# Code.