1

모달 뷰 컨트롤러가 현재 표시되는지 확인해야합니까? 현재 볼 수 있습니까?모달 뷰 컨트롤러가 표시되는지 확인

viewDidAppear가 두 번 호출되고 한 번만 호출해야 문제가 발생합니다. 모달보기 컨트롤러가 화면에 표시되는지 확인하고 싶습니다. .

내비게이션 스택에서 현재보기 컨트롤러 내부에서 코드를 작성하고 현재 모달보기 컨트롤러가 위에 있는지 확인할 수 있다면 유용할까요?

+0

bool 속성으로 모달보기 컨트롤러를 표시하거나 숨길 때 추적 할 수 없습니까? – sooper

답변

0

모달 viewController의 웰빙을 검사하기위한 올바른 위치는 viewController를 표시하는 것입니다. 프리젠 테이션 viewController는 제시된 viewController가 여전히 존재하는지 또는 해고되었는지 (두 태스크 모두 책임이 있음) 알아야한다. presentingViewController는 필요한 참조를 전달하는 presentedViewController 속성을 가지고 있습니다.

예를 들어 다른 viewController를 밀어서 모달 VC를 덮어 버리면 navController.viewControllers 배열 속성에서 확인할 수 있습니다. 다시 한번 최고의 참조 소스가 presenting viewController로 돌아갑니다.

viewController를 표시 할 때 모달 viewController에 대한 참조를 가져올 수없는 경우 디자인에 문제가있을 수 있으므로 다시 생각해 봐야합니다.

0

"viewDidAppear"이 두 번 호출되는 경우보기를 두 번 인스턴스화하는 중일 수 있습니다.

"viewDidAppear"에 중단 점을 설정하고 백 트레이스를보고 새보기 컨트롤러가 프로그래밍 방식으로 (코드로) 생성되었거나 XIB 또는 스토리 보드에서 인스턴스화되었는지 확인하십시오.

한 번만 생성하면됩니다. 한 번만 생성하면 "viewDidAppear"이 한 번만 호출됩니다.

+0

p.s. * 모달 * 뷰 또는 그냥 일반 뷰에 대해 이야기하고 있습니까? Valentin이 편집을하기 전에 "모델 뷰 컨트롤러"(디자인 패턴)에 대해 이야기하고있었습니다. 그리고 저는 여러분이 일반 뷰에 대해서 이야기하고 있다고 의심합니다. 그러나 그때 @sooper는 "모달 (modal)"을 언급했으며, 이것이 발렌틴이 자신의 편집을하도록 고무시킨 이유라고 생각합니다. –

+0

그는 처음으로 VC를 끌어 와서'viewDidAppear'을 얻고, 두 번째 컨트롤러를 모달로 제시하고, 그 모달을 해제하고, 뷰가 다시 나타날 때 첫 번째 컨트롤러에서'viewDidAppear'을 다시 얻는 것에 대해 이야기하고 있다고 생각합니다. 이것은 표준 작동 절차입니다. – Rob

+0

@MichaelDautermann 감사합니다. 둘 다 시작됩니다. 시작시 VC를로드하면 로그인 용 모델 VC를 제공하지 않으면 사용자가 로그인했는지 확인합니다. 내가보고있는 것은 원래 (첫 번째) VC에서 viewDidAppear가 두 번 호출된다는 것입니다. 당신은 정확합니다, 이상적으로 나는 이것이 두 번 불리는 것을 원하지 않을 것입니다, 이것이 정상적인 지 확신 할 수 없습니다.이것이 내가 브레이크 포인트로 역 추적 할 수있는 것이라면 콜백이 발생하는 코드의 멈춤에서 어떻게 결정할 수 있습니까? – StuartM

0

viewDidAppear에있는 항목을 한 번 실행하려면 몇 가지 방법이 있지만 여기에는 하나가 있습니다. 첫째, 클래스의 속성을 정의 :

@property (nonatomic) BOOL alreadyRun; 

그런 다음 viewDidAppear에, 그 속성을 확인 :

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    if (!self.alreadyRun) 
    { 
     self.alreadyRun = YES; 

     // do whatever you need to have done once per instance of this VC 
    } 
} 
0

나는 당신이 PresendedViewController 속성을 사용할 수 있다고 생각합니다. 이전 버전에서는 modalViewController였습니다.

관련 문제