Xamarin.Mac의 일반적인 패턴 및 관용구
C#을 통해 노출된 Apple API 전체에서 특정 관용구와 패턴이 반복해서 표시됩니다. Xamarin.iOS를 사용한 프로그래밍 경험이 있는 경우 익숙하게 보일 수 있습니다. 설명서는 종종 이러한 패턴과 관용구를 반복적으로 참조하므로 이를 확실하게 이해하면 찾은 설명서를 이해하는 데 도움이 됩니다.
MVC - 모델 뷰 컨트롤러
모델 뷰 컨트롤러 또는 MVC는 Cocoa 전체에서 발견되는 매우 일반적인 패턴입니다. 자세한 논의는 이 문서의 범위를 벗어나지만 간단히 말해서 애플리케이션을 구성 요소로 구성하는 방법입니다.
- 모델 개체는 보고 조작하는 기본 데이터를 나타냅니다(주소록의 주소와 같이).
- 뷰 개체는 화면에서 지정된 개체의 그리기를 처리하고 사용자 상호 작용을 처리합니다(화면에 주소를 표시하는 텍스트 필드).
- 컨트롤러 개체는 모델과 뷰 간의 상호 작용을 처리합니다. 모델 변경 내용을 "위로" 푸시하여 보기를 업데이트하고 사용자가 UI를 변경할 때 보기에서 "아래로" 변경 내용을 푸시합니다.
WPF와 같은 다른 라이브러리의 MVVM(모델 뷰 ViewModel)에 익숙한 경우 컨트롤러는 ViewModel과 비슷하게 작동하지만 특정 UI 요소에 더 밀접하게 바인딩되는 경우가 많습니다.
자세한 내용은 다음에서 확인할 수 있습니다.
데이터 원본/대리자/서브클래싱
Cocoa의 또 다른 매우 일반적인 패턴은 UI 요소에 데이터를 제공하고 사용자 상호 작용에 반응하는 방법을 다룹니다. NSTableView
예를 들어 각 행에 대한 데이터, 해당 행을 나타내는 일부 UI 요소 집합, 사용자 상호 작용에 반응하는 동작 집합 및 사용자 지정의 양을 제공해야 합니다. 데이터 원본 및 대리자 패턴을 사용하면 서브클래싱에 의존하지 않고도 대부분의 사례를 처리할 수 있습니다 NSTableView
.
이
DataSource
속성에는 테이블을 데이터(통해GetRowCount
GetObjectValue
)로 채우기 위해 호출되는 사용자 지정 하위 클래스의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의 설명서 및/또는 정의를 확인해야 합니다.
자세한 내용은 대리인, 프로토콜 및 이벤트 설명서를 참조하세요.