2011-01-02 12 views
9

Mam kilka kontrolerów interfejsu uiPopover w mojej uniwersalnej aplikacji na iPada. Mam teraz wymóg wywołania funkcji po odrzuceniu określonego popover. Mogę to zrobić łatwo, jeśli użytkownik kliknie "zamknij" wewnątrz popover, ale jeśli dotkną ekranu, aby ukryć popover, nie mogę uruchomić mojej funkcji.Wykryto, kiedy kontrolery UIPopoverController są odrzucane.

Od jakiegoś czasu googlowałem i nie mogę znaleźć żadnych metod delegowania, których mógłbym użyć w moim głównym kontrolerze widoku, aby je przechwycić. Chciałbym coś takiego jak didDismissPopoverController - ale domyślam się, że nie jest dostępne.

JEŚLI NIE, myślę, że jedyną rzeczą do zrobienia byłoby wykrycie dotknięć i spust wtedy? Zasadniczo podświetlam wiersz UITableView i ładuję popover. Muszę odznaczyć wiersz - więc chcesz po prostu wywołać [table reloaddata].

Dzięki za pomoc w tej sprawie!

Odpowiedz

21

Musisz przypisać delegata do UIPopoverController, a następnie zaimplementować metodę - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController. Na przykład:

@interface FooController : UIViewController <UIPopoverControllerDelegate> { 
    // ... 
} 
// ... 
@end 

Po instancję UIPopoverController (powiedzmy, na ten przykład, w FooController) ...

UIPopoverController *popover = // ... 
popover.delegate = self; 

Następnie można zaimplementować metodę:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    // do something now that it's been dismissed 
} 

To prawda, nie testowałem tego, ale wygląda na to, że powinno zadziałać ...

Hope to pomaga!

4

Można użyć metody delegata popoverControllerDidDismissPopover po następującym przypisaniu: self.popoverController.delegate = self;

Należy zauważyć, że metoda delegowania popoverControllerDidDismissPopover nie jest wywoływana, jeśli programowo wywołasz [self.popoverController dismissPopoverAnimated: YES].

+0

To prawda, spójrz w dokumentacji: 'Kontroler POPover nie wywołuje tej metody w odpowiedzi na programowe wywołania metody dismissPopoverAnimated:. Jeśli programowo zostanie odrzucony popover, należy wykonać działania czyszczące natychmiast po wywołaniu metody dismissPopoverAnimated :. –

Powiązane problemy