내 앱에서 탐색 컨트롤러를 사용하고 있습니다. 나중에 일부보기 presentViewController
에서 확대 된 이미지를 보여주기 위해 사용 하고 있습니다. 또한 스토리 보드 또는 펜촉을 사용하지 않습니다.
iOS 7에서만이 오류가 발생합니다. iOS 6 및 이전 버전에서 잘 작동합니다.
분리 된 뷰 컨트롤러에 뷰 컨트롤러를 표시하지 않는 것이 좋습니다.
답변
푸시 탐색에서 경고가 표시되지 않도록하려면 다음을 직접 사용할 수 있습니다.
[self.view.window.rootViewController presentViewController:viewController animated:YES completion:nil];
그런 다음 모달보기 컨트롤러에서 모든 것이 끝나면 다음을 호출하면됩니다.
[self dismissViewControllerAnimated:YES completion:nil];
답변
이 경고의 이유는 전체 크기가 아닌 작은보기에보기 컨트롤러를 표시했기 때문입니다. 아래는 내 프로젝트의 이미지입니다. 위의 네 가지 옵션을 클릭하십시오. 사용자는 다른 childviewcontroller의보기로 이동합니다 (tabViewcontroller처럼 작동합니다). 그러나 childviewcontroller에는 작은 크기의보기가 포함되어 있습니다. 따라서 childviewcontroller에서보기를 제시하면이 경고가 나타납니다.
이것을 피하기 위해 childviewcontroller의 부모에 대한 견해를 제시 할 수 있습니다
[self.parentViewController presentViewController:viewController animated:YES completion:nil];
답변
기다립니다 viewDidAppear()
:
이 오류는보기가 실제로 나타나기 전에보기 제어기를 표시하려고하는 경우에도 발생할 수 있습니다 (예 :보기를 viewWillAppear()
이전 또는 이전에 표시). 그 이후 viewDidAppear()
또는 내부에 다른 견해를 제시 하십시오.
답변
내 경우에는 sampleViewController
의보기를 하위보기로 추가 한 다음 sampleViewController
( 보기 self
대신 UIViewController
인스턴스) 보기에서 팝 오버를 제시하려고합니다 .
[self.view addSubview:sampleViewController.view];
올바른 방법은 다음과 같습니다.
// make sure the vc has been added as a child view controller as well
[self addChildViewController:sampleViewController];
[self.view addSubview:sampleViewController.view];
[sampleViewController didMoveToParentViewController:self];
Btw, 이것은 테이블 뷰 셀에서 팝 오버를 나타내는 경우에도 작동합니다. 테이블 뷰 컨트롤러가 하위 뷰 컨트롤러로 추가되었는지 확인하면됩니다.
답변
문제는 적절한 뷰 컨트롤러 계층 구조가 없다는 것입니다. 앱의 rootviewcontroller를 설정 한 다음 새보기 컨트롤러를 밀어 올리거나 표시하여 새보기를 표시하십시오. 각 뷰 컨트롤러가 뷰를 관리하도록합니다. tabbarviewcontroller와 같은 컨테이너 뷰 컨트롤러 만 다른 뷰 컨트롤러 뷰를 자체 뷰에 추가해야합니다. 뷰 컨트롤러를 올바르게 사용하는 방법에 대한 자세한 내용은 뷰 컨트롤러 프로그래밍 안내서를 읽으십시오.https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/
답변
스위프트 3
이것에 걸려 넘어지는 사람에게는 빠른 답변이 있습니다.
self.parent?.present(viewController, animated: true, completion: nil)
답변
나는 거의 같은 문제가 있습니다. 그 이유는 다른 컨트롤러에 “일부”컨트롤러를 표시하려고했기 때문에 애니메이션이 완료된 후 컨트롤러를 루트로 설정했습니다. 이 작업이 끝나면 모든 추가 컨트롤러가 경고 메시지를 표시합니다. ” 분리 된 뷰 컨트롤러에 뷰 컨트롤러를 표시하지 않는 것이 좋습니다. “. 그리고이 경고를 시작 부분에 프리젠 테이션없이 “일부”컨트롤러를 루트로 설정하면됩니다.
제거 :
[[self rootController] presentViewController:controller animated:YES completion:^{
[self window].rootViewController = controller;
[[self window] makeKeyAndVisible];}];
프레젠테이션없이 루트로 만드십시오.
[[self window] setRootViewController:controller];