많은 응용 프로그램에서 필자는 현재 시각적 컨트롤러에 대한 참조가없는 일부 클래스에서 컨트롤러를 모달로 제공해야한다는 것을 여러 번 경험했습니다. (예 : 제품의 다운로드 진행 상황을 표시하는 데 사용되는 컨트롤러를 제공하는 StoreKit 트랜잭션 관찰자).어디서나 UIViewController를 모달로 표시 할 때 권장되는 방법은 무엇입니까?
Three20을 사용하면 - [TTNavigator visibleViewController]
을 사용하여 작업을 완료 할 수 있지만 프레임 워크를 사용하지 않으려면 어떻게해야합니까? TTNavigator
처럼 작동하는 사용자 지정 함수를 다시 구현해야합니까? Apple API에 비슷한 방법이 있을까요? 예를 들어 내 응용 프로그램의 모든 컨트롤러에 대해 공통의 부모 클래스를 만든 다음 NSNotificationCenter
을 사용하여 모든 응용 프로그램 전체 알림을 처리하는 것이 더 좋을까요? (물론 이것은 하나의 클래스에서 관련없는 코드를 갖는 부작용을 가질 것입니다.)
저는 Apple이 그의 표준 API에서이 기본 기능을 제공하지 않았다는 것에 정말 놀랐습니다. 아니면이 문제가 반복적으로 발생한다는 사실은 잘못된 설계 관행의 징조입니까?
자세한 답변 해 주셔서 감사합니다. App Delegate에는 (메인 윈도우를 통해) 루트보기 컨트롤러에 대한 참조가 있습니다. 그러나 여전히 현재 보이는 컨트롤러를 즉시 볼 수는 없습니다. 현재 컨트롤러의 맨 위에 표시되는 모달 컨트롤러가있을 수 있으며 탐색 스택이 더 복잡 할 수 있습니다. 제가 제시 한 예에서, 당신이 말한대로 문제를 처리하는 순간 : 애플이 낙담 했음에도 불구하고 스토어 컨트롤러를 거래 관측자로 설정했습니다. 애플리케이션이 시작되는 즉시 미완료 트랜잭션을 처리해야하므로 . – eugeniodepalo
아, 알겠습니다. - 모달 컨트롤러가 이미 표시되어있을 가능성을 고려하지 않았습니다 (예 : 모달 내 모달). 이 경우 가장 간단한 방법은 창을 덮어 쓰고 전체 앱보기 계층 구조 위에 덤프하는 것일 수 있습니다. – lxt