2010-12-17 18 views
13

http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.htmlDlaczego nie odrzucaćCiskichButtonIndex nigdy nie zadzwonił clickedButtonAtIndex?

używam tego kodu, aby dostać mój iPhone aplikacja do wyświetlania alertView z dołączonym UITextField i dopasowanie CANCEL i OK.

Użytkownik może wprowadzić tekst, nacisnąć CANCEL lub OK ... i widzę tekst wprowadzony przez użytkownika ... za pomocą mojego kodu w metodzie clickedButtonAtIndex.

Wszystko działa z wyjątkiem 1 rzeczy: zamiast OK użytkownik może nacisnąć DONE na klawiaturze. Używam metody dismissWithClickedButtonIndex do symulacji kliknięcia OK ... ale kliknięcieButtonAtIndex nigdy nie zostanie wywołane.

Nie należy lekceważyćClickedButtonIndex również wywołać clickedButtonAtIndex?

Próbuję uzyskać kliknięcieButtonAtIndex, aby uzyskać wywołanie, jeśli ANULUJ, lub OK, lub nawet DONE jest trafiony.

Odpowiedz

0

Nie jestem pewien, czy w pełni rozumiem Twoje pytanie, ale tutaj jest mój próba:

Po pierwsze, trzeba usunąć if (buttonIndex != [alertView cancelButtonIndex]) od przykładu. Powinno to działać w przypadku przycisków OK i CANCEL.

Aby rozpoznać klawisz DONE klawiatury, użyj - (BOOL)textFieldShouldReturn:(UITextField *)textField z UITextFieldDelegate. Tutaj możesz zadzwonić pod numer [textField resignFirstResponder], aby zamknąć klawiaturę.

Co ponadto można zrobić w wersji clickedButtonAtIndex? Nie możesz stworzyć własnej metody i zadzwonić, gdy jej potrzebujesz?

37

Ponieważ jest to stare pytanie, które prawdopodobnie już się pojawiło, ale byłem bardzo sfrustrowany tym i nie mogłem znaleźć żadnej pomocy od Google, więc dla każdego, kto natknie się na to w przyszłości: kiedy zadzwoń pod numer dismissWithClickedbuttonIndex, metoda, która zostanie wywołana, to alertView:didDismissWithButtonIndex, a nie alertView:clickedButtonAtIndex. Zachowuje się dokładnie w ten sam sposób i nie mogę zrozumieć, dlaczego byłyby to dwie osobne metody, które wydają się być tą samą akcją, ale tak właśnie jest.

+0

Dziękuję za te linie, dziwny wzorzec delegacji, odrzućKliknijClickedButton powinien CO NAJCZĘŚCIEJ wywoływać obie metody delegatora, aby zająć się kliknięciami przycisków, a drugą, aby zająć się zamykaniem alertu. Mylące, zbędne zbędne złożoność –

2

clickedButtonAtIndex jest wywoływana, gdy użytkownik faktycznie kliknie przycisk. Kliknięcie przycisku może, ale nie musi, anulować ostrzeżenie. standardowe przyciski OK/Cancel powodują odrzucenie ostrzeżenia po kliknięciu. Jeśli kliknięcie zostanie przetłumaczone na odrzucenie lub zostanie wywołana metoda dismissWithClickedbuttonIndex, zostanie wywołana DismissWithButtonIndex.

+0

Rzeczywiście, ale nie ma sensu z punktu widzenia wzorca delegacji.oznacza to, że alertViewClickedButtonAtIndex nazywa się SOMETIMES, gdy naciśnięty jest przycisk, a nie ZAWSZE, co sugeruje metoda delegowania. Czy to zamknięcie alarmu, czy też nie, jest zupełnie inny problem, teraz to jest odpowiedzialność didDismissWithButtonClicked: –

0

miałem ten sam problem z UIAlertView (bloki) categoty UIAlertView-Blocks

Moje rozwiązanie: UIAlertView (bloki) -> MYAlertView: UIAlertView

Czasami metoda: - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex nazywa. Czasami nie dzwonił.

Więc ... Próbowałem znaleźć rozwiązanie w wielu źródłach. Potem stworzyłem podklasę UIAlertView z tym samym kodem. Mój problem został rozwiązany. W rzeczywistości jest to nieco trudniejsze w użyciu. Ale nie więcej tych uciążliwych błędów.

Powiązane problemy