2010-08-25 7 views
14

Ich habe meine UIPopoverController mit Selbst als Delegierter: Ich erhalte Anrufe, wenn ich außerhalb des Popover-Controller tippen, aber wenn ich drinnen klopfen möchte ich auch ablehnen, so verwende ich -dismissPopoverAnimated: aber Delegat wird in diesem Fall nicht aufgerufen. Ist das normal? Ist das ein Fehler oder mache ich etwas falsch?UIPopoverController mit -dismissPopoverAnimated abmelden: Delegat nicht anrufen?

newDocPopoverController = [[UIPopoverController alloc] initWithContentViewController:vc]; 
[newDocPopoverController setPopoverContentSize:CGSizeMake(240, 44*4)]; 
[newDocPopoverController presentPopoverFromBarButtonItem:sender 
       permittedArrowDirections:UIPopoverArrowDirectionAny 
                 animated:YES]; 
[newDocPopoverController setDelegate:self]; 

UPDATE:

Oh, unabhängig von der Herkunft des Problems (Ob es ein Fehler oder ist dies das gewünschte Verhalten), um die Delegierten von mir Aufruf löst das Problem :)

Wenn die contentViewController des Ansicht wird berührt Ich werde den Delegierten des Eltern-UIPopoverControllers anrufen.

if ([parentPopoverController.delegate popoverControllerShouldDismissPopover:parentPopoverController]){ 
    [parentPopoverController dismissPopoverAnimated:YES]; 
    [parentPopoverController.delegate popoverControllerDidDismissPopover:parentPopoverController]; 
}r]; 
+0

Ich bin gerade auf das gleiche "Problem" gestoßen, danke, dass ich darauf hingewiesen habe, wie ich es beheben kann; dh. Verwerfen Sie den Popover-Controller und rufen Sie dann die Delegate-Methode auf. – Jack

Antwort

22

Das ist normal, erwartetes Verhalten.

die Apple docs auf popoverControllerDidDismissPopover: Zitiert:

Der popover Controller diese Methode nicht als Reaktion auf die dismissPopoverAnimated: Methode zur programmatischen Anrufe nicht nennen. Wenn Sie das Popover programmgesteuert ablehnen, sollten Sie alle Bereinigungsaktionen unmittelbar nach dem Aufrufen der dismissPopoverAnimated:-Methode ausführen.

+0

Danke !, ich c. Ich denke, dass info auch in der UIPopoverController-Klassenreferenz und nicht nur in der Delegate-Protokollreferenz angezeigt werden sollte. ;) – nacho4d

22

Programmatically die popoverControllerDidDismissPopover nicht aufgerufen und wird nicht entlassen, werden Sie den Delegierten selbst nennen müssen:

[self.PopUp dismissPopoverAnimated:YES]; 
[self.PopUp.delegate popoverControllerDidDismissPopover:self.PopUp]; 

Wo PopUp ist die Mutter UIPopoverController

this helps

Prost Al

+0

das funktioniert, leider ist es sehr unintuitiv. Anders als die anderen Modelle, die Animationen verwenden. Wenn Sie zum Beispiel die Ansicht in der Animation freigeben, wird die App beschädigt. Wenn Sie das Popover im popoverControllerDidDismissPopover freigeben, funktioniert es jedoch einwandfrei. –

0

setze den Delegierten zuerst;

yourPopup.delegate = selbst;

dann einige wo in Ihrem Code (kann in bestimmten Methode Aufruf wegen etwas Ereignis sein). verwenden Sie den folgenden Code;

[self.yourPopUp ablehnenPopoverAnimated: YES];

Verwandte Themen