Mam naprawdę dziwny problem i może być trudny do wyjaśnienia, ale doceniam wszelką pomoc lub sugestie na ten temat.
Mam widok podstawowy (Widok B), który ma UIGestureRecognizer, który wykrywa lewy i prawy gest.
Oprócz widoku B mam kilka małych widoków (widok C) obejmujących cały widok. (Pomyśl o tym jak o kalendarzu).
Na każdym Widoku C mam rozpoznawanie gestów dotknięcia i rozpoznawanie gestów długiego naciśnięcia. Na geście stuknięcia wyświetlam UIAlertView.
Oto problem:
Mogę stuknąć Widok C, a następnie przeciągnąć Widok B iZdarzenie przesunięcia widoku B jest uruchamiane przed wyświetleniem UIAlertView. To powoduje awarię mojej aplikacji, ponieważ kiedy widok B jest usuwany ze zdarzeniem przeciągnięcia, a ponieważ widok C znajduje się nad widokiem B, są one również usuwane, a alertView: clickedButtonAtIndex: nie jest w ogóle osiągany.
Czy ktoś ma jakieś pomysły, jak zapobiec przeciągnięciu przed wyświetleniem UIAlertView? Dzięki za pomoc!
Odpowiedzi:
1 dla odpowiedzi № 1Możesz spróbować stworzyć globalny BOOL
zmienna w pliku .h informująca, czy zdarzenie tap jest zarejestrowane, czy nie. W metodzie wywoływanej po zarejestrowaniu kranu ustaw zmienną na NO
, a w metodzie wywołujesz po zarejestrowaniu machnięcia, sprawdź, czy BOOL
zmienna to YES
lub NO
, a jeśli tak NO
, oznacza to, że kran został zarejestrowany i nie należy kontynuować korzystania z metody przeciągania. Następnie po prostu ustaw BOOL
zmienna na YES
po UIAlertView
został zrezygnowany. Mam nadzieję, że to pomaga!
1 dla odpowiedzi nr 2
Jak już powiedziałeś, widoki C całkowicie pokrywają widok B. Dlatego też gesty machnięcia na B nie powinny być rejestrowane, dopóki alarm nie zostanie wyświetlony. Możesz dodać rozpoznawanie gestów B do (void)didPresentAlertView:(UIAlertView *)alertView;
.
A potem w alertView:clickedButtonAtIndex:
, możesz usunąć rozpoznawanie gestów B.
HTH,
Akshay