Xamarin.iOS의 .xib 코드 생성

Apple Interface Builder 도구("IB")를 사용하여 사용자 인터페이스를 시각적으로 디자인할 수 있습니다. IB에서 만든 인터페이스 정의는 .xib 파일에 저장됩니다. .xib 파일의 위젯 및 기타 개체에는 사용자 지정 사용자 정의 형식일 수 있는 "클래스 ID"가 제공될 수 있습니다. 사용자 지정 형식을 사용하면 위젯의 동작을 사용자 지정하고 사용자 지정 위젯을 작성할 수 있습니다.

이러한 사용자 클래스는 일반적으로 UI 컨트롤러 클래스의 하위 클래스입니다. 인터페이스 개체에 연결할 수 있는 콘센트(속성) 및 작업(이벤트)이 있습니다. 런타임에 IB가 로드됩니다. 이때 개체가 만들어지고 콘센트와 작업이 다양한 UI 개체에 동적으로 연결됩니다. 이러한 관리되는 클래스를 정의할 때는 IB에서 예상하는 것과 일치하도록 모든 작업 및 콘센트를 정의해야 합니다. Mac용 Visual Studio CodeBehind와 유사한 모델을 사용하여 코드를 간소화합니다. Xcode에는 비슷한 Objective-C 모델이 있습니다. 그러나 Xamarin.iOS 코드 생성 모델 및 규칙은 .NET 개발자에게 더 친숙하도록 조정되었습니다.

.xib 파일 및 사용자 지정 클래스

Cocoa Touch의 기존 형식 을 사용하는 것 외에도 .xib 파일에서 사용자 지정 형식을 정의할 수 있습니다. 다른 .xib 파일에 정의되거나 C# 코드로만 정의된 형식을 사용할 수도 있습니다. 현재 Interface Builder는 현재 .xib 파일 외부에 정의된 형식의 세부 정보를 인식하지 못하므로 나열하거나 사용자 지정 콘센트 및 작업을 표시하지 않습니다. 이 제한 사항은 나중에 제거될 예정입니다.

인터페이스 작성기의 "클래스" 탭에서 "하위 클래스 추가" 명령을 사용하여 .xib 파일에서 사용자 지정 클래스를 정의할 수 있습니다. 이러한 클래스를 "CodeBehind" 클래스라고 합니다. .xib 파일에 프로젝트에 ".xib.designer.cs" 대응 파일이 있는 경우 Mac용 Visual Studio .xib의 모든 사용자 지정 클래스에 대한 부분 클래스 정의로 자동으로 채웁니다. 이러한 부분 클래스를 "디자이너 클래스"라고 합니다.

코드 생성

코드 생성은 빌드 동작이 Page인{0} 모든 .xib 파일에 대해{0} .xib.designer.cs 파일이 있으면 활성화됩니다. Mac용 Visual Studio .xib 파일에서 찾을 수 있는 모든 사용자 클래스에 대해 디자이너 파일에서 부분 클래스를 생성합니다. Mac용 Visual Studio 작업에 대한 콘센트 및 부분 메서드에 대한 속성을 생성합니다.

.xib 파일이 변경되고 포커스가 다시 Mac용 Visual Studio 디자이너 파일이 자동으로 업데이트됩니다. 다음에 Mac용 Visual Studio 파일을 업데이트할 때 변경 내용을 덮어쓰므로 디자이너 파일을 변경하지 않는 것이 좋습니다.

등록 및 네임스페이스

Mac용 Visual Studio 디자이너 파일 위치에 대한 프로젝트의 기본 네임스페이스를 사용하여 디자이너 클래스를 생성합니다. 이 동작은 일반적인 .NET 프로젝트 네임스페이스 생성과 일치합니다. 디자이너 파일의 네임스페이스는 프로젝트의 "기본 네임스페이스"와 ".NET 명명 정책" 설정을 사용합니다. 프로젝트의 기본 네임스페이스가 변경되면 다시 생성된 클래스는 새 네임스페이스를 사용합니다. 다시 생성한 후 부분 클래스가 더 이상 일치하지 않을 수 있습니다.

런타임에서 클래스를 검색할 수 Objective-C 있도록 Mac용 Visual Studio 클래스에 특성을 적용합니다[Register (name)]. Xamarin.iOS는 파생 클래스를 NSObject자동으로 등록하지만 정규화된 .NET 이름을 사용합니다. Mac용 Visual Studio 적용된 특성은 Xamarin.iOS 동작을 재정의하여 각 클래스가 .xib 파일에 사용되는 이름으로 등록되도록 합니다. Mac용 Visual Studio 사용하여 디자이너 파일을 생성하지 않고 IB를 사용하여 정의된 모든 사용자 지정 클래스에 대해 수동으로 특성을 추가합니다. 이렇게 하면 관리되는 클래스가 예상 Objective-C 클래스 이름과 일치합니다.

클래스는 둘 이상의 .xib에서 정의할 수 없거나 충돌합니다.

비 디자이너 클래스 파트

디자이너 부분 클래스는 있는 그대로 사용할 수 없습니다. 출선은 프라이빗이며 기본 클래스는 지정되지 않습니다. 각 클래스에는 다른 파일에 해당 "비 디자이너" 클래스 부분이 있어야 합니다. "비 디자이너" 파일은 기본 클래스를 설정하고, 콘센트를 조작하며, 네이티브 코드에서 클래스를 인스턴스화하는 데 필요한 생성자를 정의합니다. 기본 .xib 템플릿에는 "디자이너가 아닌" 클래스 부분이 있지만 .xib에서 정의하는 다른 사용자 지정 클래스의 경우 디자이너가 아닌 부분을 수동으로 추가해야 합니다.

유연성을 위해 부분 클래스를 사용하는 이러한 분리가 필요합니다. 예를 들어 여러 CodeBehind 클래스는 IB에서 서브클래싱할 클래스를 서브클래싱하는 공통 관리 추상 클래스를 서브클래싱할 수 있습니다.

일반적으로 CodeBehind 클래스를 .xib.designer.cs 디자이너 파일 옆에{0} 있는 {0}.xib.cs 파일에 배치합니다.

생성된 작업 및 콘센트

부분 디자이너 클래스에서 Mac용 Visual Studio IB에 정의된 연결된 콘센트에 해당하는 속성과 연결된 작업에 해당하는 부분 메서드를 생성합니다.

콘센트 속성

디자이너 클래스에는 사용자 지정 클래스에 정의된 모든 콘센트에 해당하는 속성이 포함되어 있습니다. 이러한 속성은 지연 바인딩을 사용하도록 설정합니다. Xamarin.iOS에서 Objective C 브리지로의 구현 세부 정보입니다. CodeBehind 클래스에서만 사용하도록 의도된 프라이빗 필드와 동등하다고 생각합니다. 디자이너가 아닌 클래스 파트의 필드에 public 접근자를 추가하여 필드를 공용으로 만듭니다.

콘센트 속성이 id 형식(해당)으로 정의된 경우 디자이너 코드 생성기는 현재 편의를 위해 NSObject해당 콘센트에 연결된 개체에 따라 가능한 가장 강력한 형식을 결정합니다. 그러나 이 동작은 이후 버전에서 지원되지 않을 수 있습니다. 사용자 지정 클래스를 정의할 때 출선에 명시적으로 입력하는 것이 좋습니다.

작업 속성

디자이너 클래스에는 사용자 지정 클래스에 정의된 모든 작업에 해당하는 부분 메서드가 포함되어 있습니다. 이러한 메서드에는 구현이 없습니다. 부분 메서드의 목적은 두 가지입니다.

  1. 디자이너가 아닌 클래스 파트의 클래스 본문을 입력 partial 하면 Mac용 Visual Studio 구현되지 않은 모든 부분 메서드의 서명을 자동으로 완성합니다.
  2. 부분 메서드 서명에는 해당 동작으로 처리될 수 있도록 세계에 노출 Objective-C 하는 특성이 적용됩니다.

부분 메서드를 무시하고 특성을 다른 메서드에 적용하여 작업을 구현할 수 있습니다. 또는 기본 클래스로 넘어가게 합니다.

동작이 보낸 사람 형식 id (해당 NSObject)으로 정의된 경우 디자이너 코드 생성기는 현재 해당 작업에 연결된 개체에 따라 가능한 가장 강력한 형식을 결정합니다. 그러나 이 동작은 이후 버전에서 지원되지 않을 수 있습니다. 사용자 지정 클래스를 정의할 때 작업을 명시적으로 강력하게 입력하는 것이 좋습니다.

CodeDOM은 부분 메서드를 지원하지 않으므로 이러한 부분 메서드는 C#에 대해서만 만들어집니다. 다른 언어에 대해서는 생성되지 않습니다.

교차 XIB 클래스 사용

경우에 따라 사용자는 여러 .xib 파일에서 동일한 클래스를 참조하려고 합니다(예: 탭 컨트롤러 사용). 다른 .xib 파일에서 클래스 정의를 명시적으로 참조하거나 두 번째 .xib에서 동일한 클래스 이름을 다시 정의할 수 있습니다.

후자의 경우 .xib 파일을 개별적으로 처리하는 Mac용 Visual Studio 때문에 문제가 될 수 있습니다. Mac용 Visual Studio 중복 정의를 검색하고 병합할 수 없습니다. 동일한 부분 클래스가 여러 디자이너 파일에 정의된 경우 Register 특성을 여러 번 적용하는 충돌이 발생할 수 있습니다. 최신 버전의 Mac용 Visual Studio 충돌을 해결하려고 시도하지만 항상 예상대로 작동하지는 않을 수 있습니다. 나중에 이 동작은 지원되지 않을 가능성이 높으며, 대신 Mac용 Visual Studio 프로젝트의 모든 .xib 파일 및 관리 코드에 정의된 모든 형식을 모든 .xib 파일에서 직접 표시합니다.

형식 확인

IB에서 사용되는 형식은 Register 특성을 사용하여 CLR 형식에 매핑된 형식 이름입니다 Objective-C . 코드를 생성할 때 Mac용 Visual Studio CLR 형식을 확인하여 형식 이름을 형식으로 Objective-C 정규화합니다. 이러한 Objective-C 형식은 Xamarin.iOS 코어로 래핑됩니다.

코드 생성기는 현재 사용자 코드 또는 라이브러리의 형식 이름에서 Objective-C CLR 형식을 확인할 수 없습니다. 이러한 경우 형식 이름 축자를 출력합니다. CLR 형식을 제대로 확인하려면 형식과 Objective-C 이름이 같아야 합니다. CLR 형식은 사용하는 코드와 동일한 네임스페이스에 있어야 합니다. 이후 버전의 코드 생성기는 프로젝트의 모든 Objective-C 형식을 고려합니다.