2014-01-12 3 views
12

contentoverController에 Popover 개체를 할당하고 콘텐츠 뷰 컨트롤러에있는 단추에 닫기 코드를 넣습니다. UIPopoverController 위임이 해제 될 때 호출되지 않음

이 버튼을 누르면 :

[self.popover dismissPopoverAnimated:YES]; 

가 호출되고 팝 오버가 그라운드를 떠납니다. 그러나 대리자의 메서드는 자동으로 호출되지 않습니다. 나는 그것이 대의원을 정하지 않고 있다고 생각했지만 거기에있다. 내가 dismissPopoverAnimated 선 후 다음 줄을 추가 할 경우 대리자가 "자동으로"대리인의 메소드를 호출하지 않는 이유 이해가 안

[self.popover.delegate popoverControllerDidDismissPopover:self.popover]; 

... 제대로이라고합니다. 어떻게 이런 일이 발생할 수 있습니까?

+0

당신은 프로토콜 대표자에 대해 이야기하고 있다고 가정합니까? 그것이 작동하는 방법입니다. 프로토콜에 정의 된 메서드를 대리자에 대해 실행하려면 [delegate protocolMethod]를 사용하여 대리자에게 명시 적으로 지시해야합니다. 메소드를 실행할 위치에서 프로토콜에 10 가지 방법이 있다고 상상해보십시오. 이 시나리오에서는 대표자가 10 가지 방법을 모두 실행하지 못하도록할까요? 따라서 메서드가 하나만 정의되어 있어도 호출 할 메서드를 추측 할 수 없습니다. – Zhang

+0

일반적으로 dismissPopoverAnimated 메소드를 사용하면 popover가 해제 된 후 popoverControllerDidDismissPopover 메소드 자체가 자동으로 호출됩니다. 이것이 UIPopoverController가 해고에 관해 우리에게 제시하는 방식입니다. – frankish

+0

가능한 복제본 : [위임을 호출하지 않습니다 : -dismissPopoverAnimated : UIPopoverController를 해제 하시겠습니까?] (http://stackoverflow.com/questions/3567033/dismissing-uipopovercontroller-with-dismisspopoveranimated-wont-call-delegate) –

답변

16

'dismissPopoverAnimated :'가 사용되는 경우 대리자의 popoverControllerDidDismissPopover:이 호출되지 않습니다. UIPopoverControllerDelegate에서 popoverControllerDidDismissPopover:에 대한 Apple Documentation에서

: 방법 :

팝 오버 컨트롤러는 dismissPopoverAnimated에 프로그래밍 방식으로 호출에 응답이 메소드를 호출하지 않습니다. popover를 프로그래밍 방식으로 취소하면 dismissPopoverAnimated : 메소드를 호출 한 직후에 정리 작업을 수행해야합니다.

+0

Omg, thx for 그. – sabiland

4

두 가지 방법으로 팝업을 해제 할 수 있습니다. (a) 팝 오버 (popover) 외부에서 두드리기; 그리고 (b) 프로그래밍을 할 경우

[self.popover dismissPopoverAnimated:YES]; 

로 프로그래밍을하고, 다음 문서 (https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverControllerDidDismissPopover 말 :) :

팝 오버 컨트롤러는 프로그램 호출에 응답이 메소드를 호출하지 않습니다 dismissPopoverAnimated : 메소드에. popover를 프로그래밍 방식으로 해제하는 경우 dismissPopoverAnimated : 메서드를 호출 한 직후에 모든 정리 작업 ( )을 수행해야합니다.

따라서 위임을 자동으로 호출하는 것은 정상적인 동작이 아니며 사용자가 직접 호출하는 것은 괜찮습니다.

관련 문제