0

UIPopoverControllerUINavigationBar을 추가하는 것에 대해 다른 많은 질문을 보았습니다. 내가 본 모든 예제는 두 가지 패턴 중 하나 수행하십시오 팝 오버 서브 클래스의 init 또는 viewDidLoad 방법에서현재 탐색 컨트롤러 계층 구조에 Popover 추가

  • , 당신은 직접 UINavigationBar, as suggested here ALLOC-init를. 이 방법은 약간의 해키입니다. Popover가 UITableViewController 인 경우 멋지게 표시되지만 방금 추가 한 탐색 표시 줄이 셀 중 하나와 겹치지 않도록해야합니다.

  • 또는 많은 게시물은 팝업을 표시하기 바로 전에 UINavigationController을 만들 것을 제안합니다 (as shown here).

그러나 두 번째 방법을 사용하면 새로 만든 탐색 컨트롤러의 유일한 컨트롤러가 팝 오버가되지 않습니까? 그리고 내가 popover를 보여주고 있다는 내 견해가 이미 내비게이션 컨트롤러에 있다면, popover는 같은 내비게이션 컨트롤러에 있지 않을 것입니다. 맞습니까? 더 적절한 방법은 이미 존재하는 네비게이션 컨트롤러에 다른 컨트롤러로 생성 된 팝 오버를 추가하는 것입니다 (그리고 팝 오버를 제공하는 컨트롤러는 이미 일부인 것 같습니다). 그게 가능하니? 또는 팝 오버를위한 네비게이션 컨트롤러가 프리젠 테이션 컨트롤러의 네비게이션 컨트롤러와 독립적이어야하는 이유가 있습니까? 아니면 내가 여기서 뭔가를 놓치고 있는가?

답변

1

젊은 Skywalker와 관련하여 많은 질문이 있습니다. :)

UINavigationController을 만든 다음 제시하고 싶은 컨트롤러를 삽입하는 것이 좋습니다.

여기에 포함 된 모든 컨트롤러에 의해 혼동하지 마십시오

  • UIPopoverController 스타일과 같은 오버레이에서 기존 UIViewController을 표시하는 구조이다. UIPopoverController 그 자체도 UIViewController의 하위 클래스가 아닙니다. 이름은 오해의 소지가 있습니다.
  • 그래서 UIPopoverController은 다른 컨트롤러를 호스팅합니다. 귀하의 경우 호스트는 UINavigationController입니다.
  • UINavigationControllerUIViewController의 하위 클래스입니다. 이것은 컨테이너 컨트롤러이며 UIViewControllers의 스택을 처리 할 수 ​​있습니다.
  • 해당 스택에서 UIViewController 중 하나를 누를 : UINavigationBar으로 표시하고 장식하고 싶은 것을 누릅니다. Mr. UINavigationControllerUINavigationBar에 빌드가 포함되어 있기 때문에 그는 우리의 친구입니다.

UIPopoverController을 서브 클래스 할 필요가 없습니다. 하나의 정적 참조를 주변에 유지하면 현재 열려있는 popover를 닫을 수 있으므로 다른 것을 제시 할 수 있습니다.

어디에서 UIPopoverController를 표시하든 상관 없습니다. 그것은 항상 popover 일 것입니다. 기존 UINavigationController에서 제공되는 경우에도 마찬가지입니다. presentViewController:을 사용할 경우에만 표시되는 컨트롤러 (모달 또는 스택 맨 위에 밀어 넣기)에 따라 다른 결과가 표시됩니다.

+0

알겠습니다. 나는 컨테이너로'UINavigationController'를 생각하고 있었고'UIViewController'의 특별한 종류 인'UIPopoverController'를 생각했습니다. 상속이 어떻게 작동하는지 알지 못했습니다. 감사합니다. 내 주요 문제는 컨테이너 자체로 popover를 생각하지 않고, 전체 화면을 차지하지 않는 특수한 종류의 UIViewController와 같은 것입니다. 당신의 대답과 여기에있는 다른 것을 읽은 후에, 나는 popover **가 ** 컨테이너라는 것을 알고 있습니다. 그래서 모든 것이 훨씬 더 의미가 있습니다. – GeneralMike

2

새로 생성 된 내비게이션 컨트롤러에서 유일한 컨트롤러는 팝 오버가 아닙니까?

아니요, 팝 오버에는 네비게이션 컨트롤러가 포함되며 네비게이션 컨트롤러에는 루트보기 컨트롤러 만 포함됩니다 (그렇지 않은 경우 루트로 직접 popover에 추가됨). 당신은 팝 오버와 팝 오버 루트 뷰 컨트롤러 사이의 관계에 대해 조금 혼동하는 것

...

팝 오버가 같은 탐색 컨트롤러에되지 않습니다, 올바른

네, 맞습니다. 팝업은 실제로 다른 모든보기 위에 떠 다니는 창입니다.

아니면 여기에 뭔가 빠져 있습니까?

아마도 ... popover는 일반적으로 모달, 일시적, 전체 화면 크기보다 작은 화면을 표시하는 데 사용됩니다. Popover에 탐색 컨트롤러를 배치하고 뷰를 추가하는 것은 일반적인 방법입니다.

+0

나는 본다. 나는'UINavigationController'를 컨테이너 객체로 생각하고 popover를 컨테이너에 넣을 것으로 생각했다. 하지만 Popover **가 컨테이너 인 것처럼 들리므로, 보통 UIViewController를 넣습니다 (UINavigationController's 포함). UIViewController를 popover에 넣기로 결정하면 제시하는 컨트롤러가 포함 된 네비게이션 계층 구조가 깨집니다. – GeneralMike

0

팝 오버에 탐색 모음을 추가하는 것은 해킹되지 않습니다. 탐색 모음은 다른 일반보기입니다. 또한 UITableViewControllerview 속성이 컨트롤러의 tableView 속성을 반환하기 때문에 UITableViewController을 사용하면 탐색 모음이 테이블보기와 겹칠 것임을 의미합니다. 테이블보기 위에 테이블 막대 위에 겹치지 않고 탐색 막대를 추가하려면 일반 UIViewController을 사용하고 탐색 막대와 표보기를 정상적인 방법으로 추가하십시오. UITableViewController보기 컨트롤러 내에있는보기가 테이블보기 인 경우에만 사용해야합니다.

그런데, 나는 네비게이션 기능을 사용하지 않고 네비게이션 컨트롤러를 사용하는 것이 가장 일반적인 방법이라는 것에 동의한다.

관련 문제