다음을 통해 공유


Xamarin.Mac의 일반적인 패턴 및 관용구

C#을 통해 노출된 Apple API 전체에서 특정 관용구와 패턴이 반복해서 표시됩니다. Xamarin.iOS를 사용한 프로그래밍 경험이 있는 경우 익숙하게 보일 수 있습니다. 설명서는 종종 이러한 패턴과 관용구를 반복적으로 참조하므로 이를 확실하게 이해하면 찾은 설명서를 이해하는 데 도움이 됩니다.

MVC - 모델 뷰 컨트롤러

모델 뷰 컨트롤러 또는 MVC는 Cocoa 전체에서 발견되는 매우 일반적인 패턴입니다. 자세한 논의는 이 문서의 범위를 벗어나지만 간단히 말해서 애플리케이션을 구성 요소로 구성하는 방법입니다.

  • 모델 개체는 보고 조작하는 기본 데이터를 나타냅니다(주소록의 주소와 같이).
  • 개체는 화면에서 지정된 개체의 그리기를 처리하고 사용자 상호 작용을 처리합니다(화면에 주소를 표시하는 텍스트 필드).
  • 컨트롤러 개체는 모델과 뷰 간의 상호 작용을 처리합니다. 모델 변경 내용을 "위로" 푸시하여 보기를 업데이트하고 사용자가 UI를 변경할 때 보기에서 "아래로" 변경 내용을 푸시합니다.

WPF와 같은 다른 라이브러리의 MVVM(모델 뷰 ViewModel)에 익숙한 경우 컨트롤러는 ViewModel과 비슷하게 작동하지만 특정 UI 요소에 더 밀접하게 바인딩되는 경우가 많습니다.

자세한 내용은 다음에서 확인할 수 있습니다.

데이터 원본/대리자/서브클래싱

Cocoa의 또 다른 매우 일반적인 패턴은 UI 요소에 데이터를 제공하고 사용자 상호 작용에 반응하는 방법을 다룹니다. NSTableView 예를 들어 각 행에 대한 데이터, 해당 행을 나타내는 일부 UI 요소 집합, 사용자 상호 작용에 반응하는 동작 집합 및 사용자 지정의 양을 제공해야 합니다. 데이터 원본 및 대리자 패턴을 사용하면 서브클래싱에 의존하지 않고도 대부분의 사례를 처리할 수 있습니다 NSTableView .

  • DataSource 속성에는 테이블을 데이터(통해 GetRowCountGetObjectValue)로 채우기 위해 호출되는 사용자 지정 하위 클래스의 NSTableViewDataSource 인스턴스가 할당됩니다.

  • 속성은 Delegate 지정된 모델 개체(통해GetViewForItem)에 대한 뷰를 제공하고 UI 상호 작용(viaDidClickTableColumn, 등)을 처리하는 사용자 지정 서브클래 NSTableViewDelegate 스의 인스턴스가 MouseDownInHeaderOfTableColumn할당됩니다.

경우에 따라 대리자 또는 데이터 원본에 지정된 후크를 벗어나는 방식으로 컨트롤을 사용자 지정하고 뷰를 직접 서브클래스할 수 있습니다. 그러나 대부분의 경우 기본 동작을 재정의하는 경우 모든 동작을 직접 처리해야 합니다(선택 동작을 사용자 지정하려면 모든 선택 동작을 직접 구현해야 할 수 있음).

Xamarin.iOS에서 일부 API UITableView 는 대리자와 데이터 원본(UITableViewSource)을 모두 구현하는 속성으로 확장되었습니다. 이렇게 하면 단일 C# 클래스에 하나의 기본 클래스만 있을 수 있는 일반적인 제한 사항을 해결할 수 있으며, 프로토콜의 표면화는 기본 클래스를 통해 수행됩니다.

Xamarin.Mac 애플리케이션에서 테이블 VIews를 사용하는 방법에 대한 자세한 내용은 테이블 뷰 설명서를 참조하세요.

프로토콜

의 프로토콜은 Objective-C C#의 인터페이스와 비교할 수 있으며, 대부분의 경우 유사한 상황에서 사용됩니다. 예를 들어 NSTableView 위의 예제에서 대리자와 데이터 원본은 모두 실제로 프로토콜입니다. Xamarin.Mac은 재정의할 수 있는 가상 메서드를 사용하여 이러한 클래스를 기본 클래스로 노출합니다. C# 인터페이스와 Objective-C 프로토콜 간의 주요 차이점은 프로토콜의 일부 메서드를 구현하기 위한 선택 사항일 수 있다는 것입니다. 선택 사항인지 확인하려면 API의 설명서 및/또는 정의를 확인해야 합니다.

자세한 내용은 대리인, 프로토콜 및 이벤트 설명서를 참조하세요.