jak zaimplementować wyskakujące okno dialogowe w iOS


303

Po obliczeniach chcę wyświetlić wyskakujące okienko lub alert z komunikatem dla użytkownika. Czy ktoś wie, gdzie mogę znaleźć więcej informacji na ten temat?

Odpowiedzi:


517

Tak, UIAlertViewprawdopodobnie jest to, czego szukasz. Oto przykład:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No network connection" 
                                                message:@"You must be connected to the internet to use this app." 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
[alert release];

Jeśli chcesz zrobić coś bardziej fantazyjnego, powiedzmy, wyświetl w swoim interfejsie użytkownika niestandardowy interfejs użytkownika UIAlertView, możesz podklasę UIAlertViewi wstawić niestandardowe składniki interfejsu użytkownika w initmetodzie. Jeśli chcesz odpowiedzieć na naciśnięcie przycisku po UIAlertViewpojawieniu się znaku, możesz ustawić delegatepowyższe i zastosować - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexmetodę.

Możesz także spojrzeć na UIActionSheet.


45
Dokumentacja Apple mówi: „Klasa UIAlertView jest przeznaczona do użycia w obecnej postaci i nie obsługuje podklas”. developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
Tylko komentarz: przy włączonym ARC „[alert release]” nie jest potrzebny (przynajmniej kompilator tak mówi).
Javier Sedano

4
Podklasowanie UIAlertView nie jest obsługiwane iOS 4 i
nowsze

1
Oto przykład prostego UIAlertView z delegatem, jeśli potrzebujesz również akcji przycisków
guilherme.minglini

2
W przypadku, gdy szukasz szybkiej wersji, sprawdź Oscar Swanros' odpowiedź
Rogerio Chaves

177

Różni ludzie, którzy przychodzą na to pytanie, oznaczają różne rzeczy za pomocą wyskakującego okienka. Bardzo polecam przeczytanie dokumentacji widoków tymczasowych . Moja odpowiedź jest w dużej mierze streszczeniem tej i innych powiązanych dokumentów.

Alert (pokaż mi przykład)

wprowadź opis zdjęcia tutaj

Alerty wyświetlają tytuł i opcjonalny komunikat. Użytkownik musi to potwierdzić (alert za pomocą jednego przycisku) lub dokonać prostego wyboru (alert za pomocą jednego przycisku) przed kontynuowaniem. Tworzysz alert za pomocą UIAlertController.

Warto zacytować ostrzeżenia i porady dokumentacji dotyczące tworzenia niepotrzebnych alertów.

wprowadź opis zdjęcia tutaj

Uwagi:

Arkusz czynności (pokaż mi przykład)

wprowadź opis zdjęcia tutaj

Arkusze akcji dają użytkownikowi listę opcji do wyboru. Pojawiają się na dole ekranu lub w oknie pop-up, w zależności od wielkości i orientacji urządzenia. Podobnie jak w przypadku alertów, a UIAlertControllersłuży do tworzenia arkusza akcji. Przed iOS 8 UIActionSheetbył używany, ale teraz dokumentacja mówi:

Ważne: UIActionSheet jest przestarzałe w iOS 8. (zauważ, że UIActionSheetDelegatejest również przestarzała.) Do tworzenia i zarządzania arkusze działania w iOS 8 i później, zamiast korzystać UIAlertControllerz preferredStyleo UIAlertControllerStyleActionSheet.

Widok modalny (pokaż mi przykład)

wprowadź opis zdjęcia tutaj

Modalne widok jest samowystarczalny pogląd, że ma wszystko, co potrzebne do wykonania zadania. Może, ale nie musi zajmować całego ekranu. Aby utworzyć widok modalny, użyj UIPresentationControllerz jednym ze stylów prezentacji modalnej .

Zobacz też

Popover (pokaż mi przykład)

wprowadź opis zdjęcia tutaj

Popover to widok, który pojawia się, gdy kranów użytkownika na coś i znika, gdy dotykając poza nim. Ma strzałkę pokazującą element sterujący lub lokalizację, z której wykonano dotknięcie. Treść może zawierać wszystko, co można umieścić w kontrolerze widoku. Robisz popover za pomocą UIPopoverPresentationController. (Przed iOS 8 UIPopoverControllerbyła zalecaną metodą).

W przeszłości pop-upy były dostępne tylko na iPadzie, ale poczynając od iOS 8, można je również uzyskać na iPhonie (patrz tutaj , tutaj i tutaj ).

Zobacz też

Powiadomienia

wprowadź opis zdjęcia tutaj

Powiadomienia to dźwięki / wibracje, alerty / banery lub znaczki, które powiadamiają użytkownika o czymś, nawet gdy aplikacja nie jest uruchomiona na pierwszym planie.

wprowadź opis zdjęcia tutaj

Zobacz też

Uwaga na temat Toastów na Androida

wprowadź opis zdjęcia tutaj

W systemie Android Toast to krótki komunikat, który wyświetla się na ekranie przez krótki czas, a następnie znika automatycznie, nie zakłócając interakcji użytkownika z aplikacją.

Ludzie pochodzący z systemu Android chcą wiedzieć, co to jest wersja Toast na iOS. Niektóre przykłady tych pytań można znaleźć tutaj , tutaj , tutaj i tutaj . Odpowiedź jest taka, że w iOS nie ma odpowiednika Toast . Różne przedstawione obejścia obejmują:

  • Stwórz własną z podklasą UIView
  • Zaimportuj projekt innej firmy, który naśladuje Toast
  • Użyj alarmu bez przycisków z zegarem

Jednak radzę trzymać się standardowych opcji interfejsu użytkownika, które są już dostarczane z iOS. Nie staraj się, aby Twoja aplikacja wyglądała i zachowywała się dokładnie tak samo jak wersja na Androida. Zastanów się, jak go ponownie zapakować, aby wyglądał i działał jak aplikacja na iOS.


3
Z notatką o Android Toast wciąż! Miły! Te informacje pomagają nowym programistom pochodzącym z rozwoju Androida. Dziękuję Ci!
Filipe Brito,

3
Człowieku, muszę to wydrukować i oprawić! Uratowałeś mnie wczoraj i dziś: D
finngu

58

Od wydania iOS 8 UIAlertViewjest teraz przestarzałe; UIAlertController jest zamiennikiem.

Oto próbka tego, jak to wygląda w Swift:

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertActionStyle.default)
{
    (UIAlertAction) -> Void in
}
alert.addAction(alertAction)
present(alert, animated: true)
{
    () -> Void in
}

Jak widać, interfejs API pozwala nam na implementację wywołań zwrotnych zarówno dla akcji, jak i kiedy prezentujemy alert, co jest całkiem przydatne!

Zaktualizowano dla Swift 4.2

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertController.Style.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertAction.Style.default)
        {
            (UIAlertAction) -> Void in
        }
        alert.addAction(alertAction)
        present(alert, animated: true)
        {
            () -> Void in
        }

@Entalpi Czy presentViewController powinien mieć klamrę zamykającą i jaka jest różnica między blokiem ukończenia a samym ukończeniem: zero?
Andrew Plummer

Nie ma różnicy. Istnieje blok do wywołania, który zostanie wywołany.
Entalpi

25

Zaktualizowano dla iOS 8.0

Od iOS 8.0 będziesz musiał używać UIAlertController w następujący sposób:

-(void)alertMessage:(NSString*)message
{
    UIAlertController* alert = [UIAlertController
          alertControllerWithTitle:@"Alert"
          message:message
          preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction 
          actionWithTitle:@"OK" style:UIAlertActionStyleDefault
         handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}

Gdzie self w moim przykładzie to UIViewController, który implementuje metodę „presentViewController” dla wyskakującego okienka.

David


11

W przypadku Swift 3 i Swift 4:

Ponieważ UIAlertView jest przestarzały, istnieje dobry sposób wyświetlania Alert na Swift 3

let alertController = UIAlertController(title: NSLocalizedString("No network connection",comment:""), message: NSLocalizedString("connected to the internet to use this app.",comment:""), preferredStyle: .alert)
let defaultAction = UIAlertAction(title:     NSLocalizedString("Ok", comment: ""), style: .default, handler: { (pAlert) in
                //Do whatever you want here
        })
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)

Przestarzałe:

To jest szybka wersja zainspirowana sprawdzoną odpowiedzią:

Wyświetl AlertView:

   let alert = UIAlertView(title: "No network connection", 
                           message: "You must be connected to the internet to use this app.", delegate: nil, cancelButtonTitle: "Ok")
    alert.delegate = self
    alert.show()

Dodaj delegata do kontrolera widoku:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Gdy użytkownik kliknie przycisk, ten kod zostanie wykonany:

func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {


}

UIAlertView jest teraz przestarzałe.
Parth Sane

7

Chociaż już napisałem przegląd różnych rodzajów wyskakujących okienek, większość ludzi potrzebuje tylko alertu.

Jak zaimplementować wyskakujące okno dialogowe

wprowadź opis zdjęcia tutaj

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

Moja pełniejsza odpowiedź jest tutaj .


0

Oto wersja C # w Xamarin.iOS

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.