2014-11-26 2 views
3

사용자 정의 UIView 하위 클래스에 대해 하나의 xib 파일이 있습니다. 잘 작동합니다. 올바른 펜촉을로드하고 클래스의 인스턴스를 만들 수 있으며 xib 파일에 추가 한 모든 하위 뷰가 포함되어 있습니다.하나의 xib, 여러 하위 클래스

그러나이 뷰의 하위 클래스도 만들었지 만이 클래스의 인스턴스를 만들고 부모 클래스에서 사용하는 xib 파일을 사용하는 방법을 알아낼 수 없습니다. 이것은 가능한가? 뷰 계층 구조, 서브 뷰 및 GUI가 동일하게 보이기 때문에 하위 클래스에 대한 새 xib 파일을 만들고 싶지 않습니다. 단지 다른 코드 일뿐입니다.

펜촉을로드하고 xib 설정에서 "사용자 정의 클래스"로 지정된 클래스와 다른 클래스에 "연결"할 수 있습니까? 또는보기의 새 인스턴스를 만들고 특정 이름의 xib를 사용하도록 지시 할 수 있습니까?

+0

http://stackoverflow.com/questions/5246074/uiview-subclass-with-its-own-xib –

답변

2

생성 된 객체를 대체하기 위해 -awakeAfterUsingCoder:으로 정말 이상한 것을 쓸 수는 있습니다. 그러나 이것은 정말로 불안정하고 일부는 올바르게 할 수 있습니다.

.xib 파일에는이 집합이로드 될 때 클래스, 크기, 기타 특성, 부모 개체, 제약 조건 등의 각 개체에 대한 정보가 deserialised되고 적용되는 일련 개체가 저장됩니다. 따라서 xib 파일은 어떤 클래스가 +alloc 및 기타 메시지를 수신해야하는지 저장하므로 어떤 개체가 KVC (-setValue:forKey:)를 통해 모든 특성을 수신하게됩니다. 따라서, xib 파일은 어떤 클래스가로드되어야 하는지를 알려주기 때문에 일부 클래스가 일부 xib를로드하도록 구성 할 수는 없습니다.

나는 당신의 코드를 리팩터링하기를 제안한다. (예를 들어) 다른 서브 클래스 로직을 다른 객체에 캡슐화한다. 따라서 서로 다른 논리를 가진 여러 하위 클래스가 있기 전에 xib에서로드 할 수있는 단일 클래스를 갖게되지만 MyDifferentLogicVariant1Implamentor 엔티티를 '다른'클래스에 대한 다른 논리를 유지하도록 설정해야합니다.

Superclass - Subclass1 - Subclass2 
vs 
Superclass.differentLogic = DifferentLogicImplementor1 
Superclass.differentLogic = DifferentLogicImplementor2 
+1

그래, 그건 내가 뭘 결정거야. 설명 주셔서 감사합니다! – andlin

관련 문제