Published on

Alert va confirmationDialog

Authors

Alert va tasdiqlash dialoglari iOS-da foydalanuvchidan amalni tasdiqlashni so'rash yoki tanlov berish uchun ikki xil usul. Foto o'chirishga harakat qilganingizda tizim "Ishonchingiz komilmi?" deb so'raydigan kichik oynani tasavvur qiling. Bu alert. Safari-da ulashish tugmasini tepsangiz va pastdan bir nechta tanlovli menyu ko'tarilsa β€” bu tasdiqlash dialogi (ba'zan action sheet ham deyiladi).

Amaliy qoida: alert β€” to'xtatuvchi, muhim karorat uchun (ma'lumot o'chirish, hisobdan chiqish, to'lovni tasdiqlash). .confirmationDialog β€” bir nechta tanlov uchun, lekin hech birining oqibati jiddiy emas (Foto saqrash, Nusxalash, Ulashish).

Ikkisi ham Bool-ga bog'lanadi: Bool true bo'lganda muloqot ko'rinadi. Foydalanuvchi tugmani bosganida yoki chetga tepganda Bool avtomatik false-ga o'rnatiladi.

Swift
ContentView.swift
import SwiftUI struct ContentView: View { // Bool alertni ko'rish/yashirishni boshqaradi @State private var showDeleteAlert = false var body: some View { Button("Elementni o'chirish") { // True-ga o'rnatish alertni paydo qiladi showDeleteAlert = true } .foregroundStyle(.red) // .alert bool-ni kuzatadi .alert("Bu elementni o'chirilsinmi?", isPresented: $showDeleteAlert) { // Destructive tugma β€” iOS avtomatik qizil rang beradi Button("O'chirish", role: .destructive) { // o'chirish mantiq-i shu yerda } // Cancel tugmasi β€” iOS uni tabiiy qayta joylashtiradi Button("Bekor qilish", role: .cancel) { } } message: { // message: sarlavha ostida qo'shimcha matn Text("Buni qaytarib bo'lmaydi.") } } }

Alert va dialog variantlari

.confirmationDialog

@State private var showShareOptions = false

Button("Ulashish") {
    showShareOptions = true
}
// confirmationDialog pastdan ko'tariladi β€” bir nechta variant uchun yaxshi
.confirmationDialog("Bu rasmni ulashish", isPresented: $showShareOptions) {
    Button("AirDrop bilan ulashish") { }
    Button("Nusxalash") { }
    Button("Saqlash") { }
    Button("Bekor qilish", role: .cancel) { }
}

ConfirmationDialog ekranning pastidan ko'tariladi β€” vizual tarzda alert-dan kamroq to'suvchi. Biror amalni amalga oshirish uchun bir nechta yo'l tavsiya qilish uchun ishlating, lekin hech biri jiddiy oqibatga ega bo'lmasΠ°.

.alert(item:)

struct AlertItem: Identifiable {
    let id = UUID()
    let message: String
}

@State private var activeAlert: AlertItem? = nil

Button("Xatoni ko'rsatish") {
    activeAlert = AlertItem(message: "Tarmoqqa ulanishda muammo")
}
// item: ixtiyoriy element β€” nil bo'lmasa alert paydo bo'ladi
.alert(item: $activeAlert) { element in
    Alert(
        title: Text("Xato"),
        message: Text(element.message),
        dismissButton: .default(Text("OK"))
    )
}

Ma'lum bir element haqida xato yoki xabar ko'rsatish kerak bo'lganda .alert(item:) ishlating. Element Identifiable bo'lishi kerak. Nil-ga o'rnatish alertni yopadi.

Diqqat: .alert va .confirmationDialog foydalanuvchi yopganda Bool ni avtomatik false ga qaytaradi β€” har bir tugmada buni qo'lda bajarishingiz shart emas.

Tezkor ma'lumotnoma

VaziyatIshlating
Qaytarib bo'lmaydigan amalni tasdiqlash (o'chirish, chiqish).alert
Bir nechta variant (ulashish, saqlash, nusxalash) taklif qilish.confirmationDialog
Ma'lum bir element haqida xato yoki ogohlantirish ko'rsatish.alert(item:)
Button(role: .destructive)Tanlovni qizil rang bilan ta'kidlash
Button(role: .cancel)Cancel tugmasi β€” iOS uni to'g'ri joylashtiradi

Topshiriq: o'chirish tasdiqlashi

Ro'yxat view yarating. Har bir qatorda element nomi va qizil "O'chirish" tugmasi bo'lsin. Tugma bosilganda: o'chirish alertini ko'rsating, asosiy tugma .destructive role-ga ega bo'lsin va message: qo'shing. Bekor qilish tugmasi ham bo'lsin. Simulyatorda sinab ko'ring va natijani kuzating.

Buy mea coffee