문제

View 컨트롤러를 설정하여보기에서 필드를 새로 고치기 위해 내비게이션 컨트롤러에서 푸시되고 탐색 컨트롤러 뷰에서 팝업 될 때 객체를 출시 할 수있는 방법은 무엇입니까?

내 목표는보기 컨트롤러의 경우 :

  1. 내비게이션 컨트롤러 스택에서 눌렀을 때만 디스플레이를 새로 고침
  2. 내비게이션 컨트롤러 스택에서 팝업 될 때 데이터를 출시합니다.
  3. 컨트롤러를 가능한 한 많이 재사용합니다 (XIB 파일로드/하역 오버 헤드를 제거하기 위해)

대의원 방법이 있습니까? viewWillBePushed: 그리고 viewWillBePopped:?

예시

세 가지 층의보기가 있다고 가정 해 봅시다.

Movies (MovieListController)
   --> Movie Basic Info (MovieInfoController)
        --> Movie Credits (MovieCreditsController)

수업이 있다고 가정합니다 Movie 각 영화를 대표합니다.

여기, 나는 3 개만 있고 싶다 UIViewControllerS, 프로그램 런타임에서 각각의 인스턴스. 그래서 나는 똑같이 재사용 할 수 있습니다 MovieInfoController 다른 영화와 마찬가지로 MovieCreditsController.

그러나 나도 원합니다 MovieInfoController 뷰 필드 (예 : 제목, 출시 날짜 등) 만 스택에 눌렀을 때만 업데이트합니다. 디스플레이를 구현합니다 viewWillAppear 언제라도 필드를 업데이트하도록 강요합니다 MovieCreditsController 튀어 나옵니다.

또한, 나는 원한다 MovieInfoController 참조를 발표합니다 Movie, 그것이 팝업 될 때, 그리고 잠재적으로 큰 물체 (예 : 덮개 이미지). 이 논리를 구현합니다 viewWillDisappear 푸시 할 때 데이터를 해제하게됩니다. MovieCreditsController 스택에.

합리적입니까? 나는 그것에 대해 잘못된 방법으로 가고 있습니까?

도움이 되었습니까?

해결책

영화 객체를 만들었 기 때문에 90%가 있습니다. MovielistController는 단일 MovieInfoconTroller를 소유해야합니다. 전화해야합니다 -setMovie: 내비게이션 컨트롤러에 밀어 넣기 전에. 전화 -setMovie: 필드를 업데이트해야합니다.

마찬가지로 MovieInfoController는 단일 moviecreditscontroller를 소유하고 전화해야합니다. -setMovie: NAV 컨트롤러에 밀어 넣기 전에.

MovielistController 및 MovieInfoController에서 전화 할 수 있습니다 [subController setMovie:nil] 그들의 -viewDidAppear: 메모리를 확보하기 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top