2014-10-03 23 views
5

Mój problem jest dość prosty, ale nie mogę go obejść. Po naciśnięciu przycisku przedstawiam UIActionSheet z dwiema opcjami (biblioteka/kamera). Kiedy użytkownicy naciśniecie przycisk na arkuszu UIActionSheet, przedstawiam UIPopoverController z biblioteką zdjęć lub prezentuję kamerę modalnie.Przedstawianie UIPopover z arkusza UIActionSheet

Gdy przycisk na arkuszu działania naciśnięciu pojawia się następujące ostrzeżenie w konsoli:

Warning: Attempt to present <UIImagePickerController: 0x17ae1600> on <MyViewController: 0x17a3ca00> which is already presenting <UIAlertController: 0x1884acb0>

jakieś pomysły na odpowiednim obejście?

Odpowiedz

16

Znalazłem, że dzieje się to na iOS8. Prezentowałem popover od actionSheet:clickedButtonAtIndex:. Rozwiązaniem dla mnie było użycie zamiast tego actionSheet:didDismissWithButtonIndex:.

+2

Problem pojawił się również na moim iOS 8. Właśnie przetestowałem to rozwiązanie i działa, dzięki. Chociaż poprzednio wybrana odpowiedź również działa, jest to lepsze rozwiązanie. –

+0

Działa, dziękuję! – Insider

+0

To zadziałało tylko dla mnie * po * Wyłączyłem animację do wyświetlania arkusza czynności w pierwszej kolejności. –

0

Proponuję czekać do ukrycia Schowka UIAction przed zaprezentowaniem innego kontrolera widoku. Więc przenieść kod, który przedstawia nowy kontroler widok z actionSheet: clickedButtonAtIndex: metodę do innej metody i nazywają to asynchronicznie, czyli coś jak [self performSelector:@selector(presentImagePicker) withObject:nil afterDelay:1.0];

dnia 1 sekundowe opóźnienie pozwala actionsheet być ukryte przed inny kontroler widoku jest przedstawiony .

+0

Dzięki. To działa dobrze, chociaż nie lubię zwlekać z opóźnieniem. Jeśli nie ma lepszych podstępów, wykorzystam to. –

+1

1 sekunda może być konserwatywna - możesz uciec z krótszym czasem (być może w rzeczywistości wszystko powyżej zera). Dopóki animacja jest animowana, wydaje mi się, że na ekranie pojawi się coś w odpowiedzi na ich dotknięcie, a użytkownik nie zauważy opóźnienia. – danielquokka

+0

Zmieniłem opóźnienie na 0.25 i nadal działa i jest trochę płynniejsze. Dzięki za pomoc. –

Powiązane problemy