2011-06-13 3 views
15

을 탭하면 UIPopoverController를 닫지 마십시오. 많은 사람들에게 유용 할 것 같은 답변을 찾을 수 없었습니다.약간의 검색 후에

UIPopoverController을 만들 수있는 방법이 있습니까? 사용자가 외부에서 클릭하면 닫히지 않습니까? 나는 사용자가 취소 버튼을 사용해야한다는 사실을 알고 싶다. (예, 아마도 이것이 애플의 HIG에 어긋난다는 것을 알고 있지만 드문 경우이며 사용자 경험 관점에서 볼 때).

도움 주셔서 감사합니다.

+2

"이 *** ***이 (가) 애플의 HIG에 위배됩니다."라고 읽었습니까? –

+0

필자는 꽤 많은 시간을 읽었지만 디자인 (다른 응용 프로그램의 파일을 열어 저장하는 것)에 대해서도 완벽하게 이해할 수 있으며 상당수의 응용 프로그램에서이를 수행하는 것으로 나타났습니다. :/ –

답변

20

탭이 발생한 위치에서 히트 테스트를 수행 할 수 있으며 popover 대리자에서 NO를 반환합니다. - (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController

+1

+1 : 이것은 완벽합니다. 문서에서 그 부분을 훑어보아야합니다. 감사. 또한 dismissPopoverAnimated를 호출 할 때 호출되지 않습니다. 따라서 실제로 테스트를 수행 할 필요조차 없습니다. 감사합니다. –

+1

주의 :이 위임 방법 (실제로'UIPopoverControllerDelegate'의 모든 메소드)은 더 이상 사용되지 않습니다 : https://developer.apple.com/documentation/uikit/uipopovercontrollerdelegate/1624661-popovercontrollershoulddismisspo?language=objc. – ajbmdi

25

에 표시되는 UIViewControllermodalInPopover 속성을 설정하기 만하면됩니다.

popover = [[UIPopoverController alloc] initWithContentViewController:content]; 
content.modalInPopover = YES; 
[popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

as of iOS5, 당신은 -viewDidAppear의 내부 modalInPopover을 설정해야합니다,주의하십시오.

1

그래서 저는 이것이 오래된 질문이라는 것을 알고 있습니다. 그러나 오늘날 해결책을 모색하고있는 누구나 쉽게 대답 할 수 있습니다.

Storyboard Segue를 사용하는 경우,보기에서 다른 객체와 상호 작용할 수 있도록 segue에 통과 속성을 설정할 수 있습니다. 그렇게 할 경우, popover의 경계를 벗어나 클릭하면 popover가 닫히지 않습니다.

는 여기에 좀 더 정보입니다 : What are Anchor and Passthrough used for in popover segues?

그리고 여기에 애플의 문서에서 발췌 한 것입니다 :

은 사용자가 지정된 뷰와 상호 작용과 팝 오버를 기각하지 수 있도록하려면, 당신은 할당 할 수 있습니다 패스 스루에 대한 하나 이상의 뷰 속성을 봅니다.

관련 문제