2010-08-25 3 views
14

Ho il mio UIPopoverController con self come delegato: Ricevo le chiamate quando tocco fuori dal controller popover, ma quando tocco all'interno voglio anche chiudere, quindi uso -dismissPopoverAnimated: ma delegate non viene chiamato in questo caso. È normale? È un bug o sto facendo qualcosa di sbagliato?Ignora UIPopoverController con -dismissPopoverAnimato: non chiamerà delegato?

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

UPDATE:

Oh, indipendentemente l'origine del problema (Se è un bug o questo è il comportamento previsto) chiamando il delegato da solo risolve il problema :)

Quando il contentViewController la vista viene toccata Chiamerò una chiamata al delegato di UIPopoverController padre.

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

Mi sono imbattuto nello stesso "problema", grazie per aver indicato come risolverlo; vale a dire. chiudere il popovercontroller quindi chiamare il metodo delegato. – Jack

risposta

22

Questo è normale, comportamento previsto.

Citando il Apple docs su popoverControllerDidDismissPopover::

Il controllore popover non chiama questo metodo in risposta alle richieste programmatiche al metodo dismissPopoverAnimated:. Se si elimina il popover a livello di codice, è necessario eseguire immediatamente eventuali azioni di pulizia dopo aver chiamato il metodo dismissPopoverAnimated:.

+0

Grazie !, I c. Penso che anche le informazioni dovrebbero apparire nel riferimento alla classe UIPopoverController, e non solo nel suo riferimento al protocollo delegato. ;) – nacho4d

22

programmazione del popoverControllerDidDismissPopover non viene chiamato e non sarà respinto, si dovrà chiamare il delegato da soli:

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

Dove PopUp è il genitore UIPopoverController

Spero che questo aiuti

Cheers Al

+0

funziona, sfortunatamente è molto poco intuitivo. Diverso dagli altri modelli che usano le animazioni. Ad esempio, se si rilascia la vista nell'animazione si interromperà l'app, invece qui se si rilascia il popover in popoverControllerDidDismissPopover funzionerà perfettamente. –

0

imposta prima il delegato;

yourPopup.delegate = self;

quindi alcuni in cui nel codice (potrebbe essere in chiamata metodo particolare dovuto qualche evento). utilizzare il seguente codice;

[self.yourPopUp dismissPopoverAnimated: YES];