사용자 지정 UI 컨트롤을 작성 중이며 초기화에 대한 표준 방법 (특히 컨트롤의 대리자 의존성)에 대해 궁금합니다. 대부분의 컨트롤과 마찬가지로 컨트롤도 대리자를 사용하여 렌더링 방법에 대한 중요한 정보를 제공합니다.프로그래밍 방식으로 또는 NIB에서 사용자 지정 컨트롤 초기화
NIB 내에서 컨트롤을 사용하는 경우 및 awakeFromNib
메서드가 올바르게 호출되고 대리자는 IBOutlet
을 통해 올바르게 설정됩니다. awakeFromNib
은 대리자와 상호 작용하여 내 컨트롤을 설정하는 setupControl
이라는 보조 메서드를 호출합니다. 인생의 좋은!
그러나 initWithFrame:
을 사용하여 수동으로 컨트롤을 만들면 분명히 awakeFromNib
이 호출되지 않습니다. 다른 개발자가 IB 및 프로그래밍 방식 컨트롤 작성을 모두 지원하는 방법에 대해 궁금합니다. 나는 프로그램의 경우를 지원하기위한 기술의 몇 가지를 볼 수 있습니다 setupControl
다음 setDelegate:
다음
- 포스 개발자
initWithFrame:
를 호출,. 너무 번거롭지는 않지만 내 컨트롤의 내부 작동을 노출합니다 (즉, 그들은setupControl
에 대해 알고 있어야합니다) - 대리자를 가져 오는 방법을 수정하십시오 (
initWithFrame:
). 이것은 내부 동작을 좀 더 캡슐화하지만, 특히 이것이 일반적으로 사용되는 관용구라는 것을 확신하지 못합니다 (대리자 응답을 기반으로하는 하위 뷰를 조작하는 것이 보통 뷰의 수명주기에서 약간 지연 될 때까지 지연되는 것 같습니다. setDelegate:
접근자를 재정 의하여setupControl
메서드를 호출하십시오. 이것에 대한 큰 팬은 아니며, 부작용에 의한 프로그래밍을 자극합니다.
그냥 내가 간과 한 기술을보기 위해 거기에 버릴 것이라고 생각했습니다. 생각?
감사합니다. 크레이그
그러나 '프로그래밍이 가능한 세계에서'initWithFrame : '에서'awakeFromNib '을 호출하는 데 문제가 없다고 말하면 대리인이' IBOutlet을 통해 설정 될 수 있습니다. 그것은 코드에서 수동으로 설정 될 것입니다 - 괜찮습니다. ** ** initWithFrame :이 호출 된 후에 ** 일어날 것입니다. 이것은 initWithFrame :가 대리자에 의존하기 때문에 안정적으로 awakeFromNib를 호출 할 수 없음을 의미합니다. 되고있다. 나는이 닭고기 달걀 딜레마와 내가 씨름하고있다. –
귀하의 컨트롤이 init 및 setup 단계에서 해당 대리자에 의존하고 있다는 것을 이해한다면, 대리자는 선택 사항이며 아무 것도 초기화하지 않아도됩니다. 여기에 디자인 문제가 있습니다. – Pyroh