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

이 문서에서는 단추, 레이블, 텍스트 필드, 확인란 등 표준 AppKit 컨트롤을 사용 하 여 작업 내용을 다룹니다 및 Xamarin.Mac 응용 프로그램에서 컨트롤을 분할 합니다. 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.

작업할 때 C# 에 액세스할 수 있는 Xamarin.Mac 응용 프로그램에서.NET 및 동일한 AppKit 컨트롤에서 작업을 수행할 Objective-c 하 고 Xcode 않습니다.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. Xcode의 Xamarin.Mac이 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.Mac 응용 프로그램의 사용자 인터페이스를 만드는 데 사용 되는 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.Mac 응용 프로그램에서 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.

확인 하려는 경우는 노출 C# 클래스 / objective-c 메서드 섹션을 Xamarin.Mac 내부 요소 설명도 문서를 RegisterExport 명령 하 여 통신-C# 클래스 Objective-c 개체 및 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 컨트롤, 창 프레임 영역 또는 사용에 대 한 대체 모양을 지정 일부는 활기 효과 또는 세로 막대와 같은 컨텍스트를 알림 센터 위젯입니다.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.

자세한 내용은 pleas 합니다 컨트롤에 대 한 뷰와 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

창 프레임 영역에 포함 될 수 있도록 표시 스타일을 포함 하는 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:

  • 질감 단추 반올림 - NSButton 스타일이 NSTexturedRoundedBezelStyle합니다.Round Textured Button - A NSButton with a style of NSTexturedRoundedBezelStyle.
  • 분할 된 제어 반올림 질감 - NSSegmentedControl 스타일이 NSSegmentStyleTexturedRounded합니다.Textured Rounded Segmented Control - A NSSegmentedControl with a style of NSSegmentStyleTexturedRounded.
  • 분할 된 제어 반올림 질감 - NSSegmentedControl 스타일이 NSSegmentStyleSeparated합니다.Textured Rounded Segmented Control - A NSSegmentedControl with a style of NSSegmentStyleSeparated.
  • 팝업 메뉴 질감 반올림 - NSPopUpButton 스타일이 NSTexturedRoundedBezelStyle합니다.Round Textured Pop-Up Menu - A NSPopUpButton with a style of NSTexturedRoundedBezelStyle.
  • 드롭다운 메뉴 질감 반올림 - NSPopUpButton 스타일이 NSTexturedRoundedBezelStyle합니다.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.

자세한 내용은 pleas 합니다 컨트롤에 대 한 뷰와 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.Mac Cocoa 응용 프로그램을 만들면 기본적으로 표준 비어 창을 가져옵니다.When you create a new Xamarin.Mac Cocoa application, you get a standard blank, window by default. 이 windows에 정의 된를 .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:

사용 하 여는 빨간색 I-빔 바깥쪽 둘레를 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 Interface Builder에서 이것이 objective-c 클래스를 사용할 수 있습니다.Where the [Register("SourceListView")] instruction exposes the SourceListView class to Objective-C so that is can be used in Interface Builder. 자세한 내용은 참조 하십시오는 노출 C# 클래스 / objective-c 메서드 부분을 Xamarin.Mac 내부 요소 문서에 설명를 RegisterExport 사용 되는 명령 하 여 통신-C# 클래스 Objective-c 개체 및 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 컨트롤을 확장 하는 기본 형식의 디자인 화면으로 끌어 수 있습니다 (아래 예제에서는 원본 목록), 전환할를 검사기 설정 합니다 사용자 지정 클래스 Objective-c에 노출 하는 이름 (예 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 소개 작성기 설명서.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

에서 전환 하면 Visual Studio로 다시 Mac 용 Xcode, Xcode에서 변경한 내용은 자동으로 Xamarin.Mac 프로젝트와 동기화 됩니다.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; }

정의 사용 하 여 줄 위로 MainWindow.h Xcode에서 파일: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 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.Mac 프로젝트에 동기화 합니다.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";
};

통해 노출 되었지만 단추 작업, public partial 메서드는 자동으로 생성 Xcode에서 선택한 이름입니다.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";
}

단추 상태에 대 한 (같은 해제), 상태를 확인 또는 사용 하 여 설정할 수는 State 속성에 대해는 NSCellStateValue 열거형입니다.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 - The button is pushed or the control is selected (such as a check in a Check Box).
  • 해제 -단추 푸시되 지 않습니다 또는 컨트롤을 선택 하지 않습니다.Off - The button is not pushed or the control is not selected.
  • 혼합 -조합 하 고 해제 상태입니다.Mixed - A mixture of On and Off states.

해당 키를 설정 하 고 기본 단추를 표시 합니다.Mark a Button as Default and Set Key Equivalent

사용자 인터페이스 디자인에 추가 하는 모든 단추는 단추를 표시할 수 있습니다 합니다 기본 단추를 누를 때 활성화 되는 합니다 반환/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. 다음으로 특성 검사기를 선택 합니다 해당 키 필드 및 키를 누릅니다를 반환/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. 예를 들어 위의 이미지에서 누르면 명령 + C 키를 여 합니다.For example, by pressing the Command-C keys in the image above.

때 앱이 실행 되는 단추가 있는 창 키 고 집중, 사용자가 명령 + C를 누르면 단추에 대 한 작업 활성화 됩니다 (으로-사용자가 단추를 클릭 한).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.

확인란 및 라디오 단추 (을 통해 노출 출 선) 상태 (같은 해제), 상태 확인 또는 사용 하 여 설정할 수는 State 속성에 대해는 NSCellStateValue 열거형입니다.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 - The button is pushed or the control is selected (such as a check in a Check Box).
  • 해제 -단추 푸시되 지 않습니다 또는 컨트롤을 선택 하지 않습니다.Off - The button is not pushed or the control is not selected.
  • 혼합 -조합 하 고 해제 상태입니다.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).

참조 하세요 합니다 데이터베이스 및 콤보 상자 섹션을 데이터베이스 작업 문서에 대 한 자세한.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 (5).The default value is five (5).
  • IntercellSpacing -함으로써 지정된 된 항목 둘레의 공간 크기를 조정 합니다.는 NSSize 여기서는 Width 왼쪽 및 오른쪽 여백을 지정 하는 및 Height 항목 전후 공간을 지정 합니다.IntercellSpacing - 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 컨트롤, 이들은 모두 동일한 이벤트를 합니다 NSTextField와 같은 Changed 사용자가 콤보 상자에서 텍스트의 값을 편집할 때마다 호출 되는 이벤트입니다.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.
  • 로컬 -사용자의 위치는 NSLocal합니다.Local - The user's location as a NSLocal.
  • TimeInterval -시간 값으로는 Double합니다.TimeInterval - The time value as a Double.
  • 표준 시간대 -사용자의 표준 시간대를 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 휴먼 인터페이스 지침합니다.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.Mac 앱에서 텍스트 뷰를 사용 하 여 작업의 복잡 한 예의 예제를 참조 하십시오 합니다 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. 팝 오버 제어 나, 관련 된 영역에 포함 된 창 위에 배치 하 고 테두리를 부상 하는 지점을 나타내는 화살표를 포함 합니다.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:

각 탭을 선택 합니다 인터페이스 계층 구조 설정 하려면 해당 Title 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.Mac 응용 프로그램에서 데이터 바인딩 및 키-값 코딩 기술을 사용 하 여 작성 하 고 채우는 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.Mac 응용 프로그램에서 키-값 코딩 규격 접근자를 구현, 키-값을 관찰 (KVO), 데이터 바인딩, 핵심 데이터, Cocoa 바인딩 및 스크립팅 등과 같은 다른 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.Mac 응용 프로그램에서 단추, 레이블, 텍스트 필드, 확인란 및 분할 된 컨트롤 같은 표준 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.