Как показать оповещение в iOS

Вы используете предупреждение, когда хотите обязательно что-то отобразить, чтобы у пользователя не было других вариантов, кроме ответа. В этом уроке мы рассмотрим различные подходы к созданию оповещений, предоставив примеры. Но прежде чем мы начнем, убедитесь, что у вас уже есть открытый проект для этой практики. Вы можете использовать эту ссылку, если вам нужен пошаговый процесс, как это сделать.

Этот туториал является частью моей серии SwiftUI Tutorial.

Необходимым условием для работы оповещения является логическое состояние переменная для хранения шоу, а не статуса шоу. Затем переменная передаст привязку модификатору isPresented .alert. В приведенном ниже примере мы создали кнопку, которая будет отображать предупреждение при нажатии. Запишите этот код:

struct ContentView: View {
    
    @State private var showAlert = false
    
    var body: some View {
        
        Button(action: {
            showAlert = true
        }) {
            Text("Display Alert")
        }
        .alert(isPresented: $showAlert) {
            Alert(
                title: Text("Reminder"),
                message: Text("Drink Water"),
                dismissButton: .default(Text("Done"))
            )
        }
        
    } //body
    
} //ContentView

Внутри модификатора .alert мы использовали структуру под названием Alert с тремя обязательными свойствами для заполнения: заголовок, сообщение и тип кнопки закрытия.

Теперь запустите приложение и попробуйте нажать кнопку.

Структура оповещения позволяет вам использовать основные и дополнительные кнопки, чтобы предоставить пользователю другой выбор. Например, пользователь может сказать, выполнено ли действие уже или нет, тогда появится сообщение на основе данного ответа. Запишите этот код.

struct ContentView: View {
    
    @State private var showAlert: Bool = false
    @State private var message: String = ""
    
    var body: some View {
        
        VStack {
            
            Text(message)
                .font(.title)
                .padding()
            
            Button(action: {
                showAlert = true
            }) {
                Text("Display Alert")
            }
            .alert(isPresented: $showAlert) {
                Alert(
                    title: Text("Reminder"),
                    message: Text("Drink Water"),
                    primaryButton: .default(Text("Done"), action: {
                        message = "Good job"
                    }),
                    secondaryButton: .default(Text("OK"), action: {
                        message = "Drink now"
                    })
                ) //Alert
            }
        
        } //VStack
        
    } //body
    
} //ContentView

Это вывод, когда вы запускаете код и нажимаете кнопку «Показать предупреждение»:

Выберите «Готово» или «ОК». Ответное сообщение появится в зависимости от вашего выбора.

Вот еще один пример. Допустим, вы хотите, чтобы оповещение появлялось при первом открытии приложения. Это код:

struct ContentView: View {
    
    @State private var showAlert = false
    
    var body: some View {
        
        ZStack {
            Text("Hello World")
        }
        .onAppear {
            showAlert = true
        }
        .alert(isPresented: $showAlert) {
            Alert(
                title: Text("Disclaimer"),
                message: Text("This is an early access version"),
                dismissButton: .default(Text("I understand"))
            )
        }

    } //body
    
} //ContentView

Вот как это работает. Модификатор .onAppear присоединен к стеку, который используется для автоматического перевода состояния showAlert в состояние true. Это вызовет всплывающее предупреждение в тот момент, когда приложение будет открыто.

Запуск приложения даст следующий результат:

Метод iOS 15

Оповещения в SwiftUI для iOS 15 работают иначе, чем в предыдущей версии (iOS 14 и iOS 13). Чтобы лучше понять это, мы собираемся создать подход iOS 15 из нашего первого примера. Вот код.

struct ContentView: View {
    
    @State private var showAlert = false
    
    var body: some View {
        
        Button(action: {
            showAlert = true
        }) {
            Text("Display Alert")
        }
        .alert("Drink Water", isPresented: $showAlert) {
            Button("Done", role: .cancel) {}
        }
        
    } //body
    
} //ContentView

В этом примере мы использовали роль кнопки вместо структуры оповещения. Роль кнопки доступна только начиная с iOS 15. Щелкните ссылку, чтобы просмотреть более подробное руководство.

Запустите приложение и снова нажмите «Показать оповещение».

Вот еще один пример всплывающего окна с несколькими кнопками.

struct ContentView: View {
    
    @State private var showAlert = false
    @State private var package =  ""
    
    var body: some View {
        
        ZStack {
            Text(package)
        }
        .onAppear {
            showAlert = true
        }
        .alert("Choose a package", isPresented: $showAlert) {
            Button("Standard") { package = "Standard" }
            Button("Pro") { package = "Pro" }
            Button("Premium") { package = "Premium" }
        }

    } //body
    
} //ContentView

Запустите приложение и попробуйте выбрать пакет.

Да пребудет с вами код,

-Дуга