Tampilan peringatan cepat dengan OK dan Batal: tombol mana yang disadap?

105

Saya memiliki tampilan peringatan di Xcode yang ditulis dalam Swift dan saya ingin menentukan tombol mana yang dipilih pengguna (ini adalah dialog konfirmasi) untuk tidak melakukan apa pun atau menjalankan sesuatu.

Saat ini saya memiliki:

@IBAction func pushedRefresh(sender: AnyObject) {
    var refreshAlert = UIAlertView()
    refreshAlert.title = "Refresh?"
    refreshAlert.message = "All data will be lost."
    refreshAlert.addButtonWithTitle("Cancel")
    refreshAlert.addButtonWithTitle("OK")
    refreshAlert.show()
}

Saya mungkin menggunakan tombol yang salah, mohon perbaiki saya karena ini semua baru untuk saya.

B_s
sumber

Jawaban:

303

Jika Anda menggunakan iOS8, Anda harus menggunakan UIAlertController - UIAlertView tidak digunakan lagi .

Berikut ini contoh cara menggunakannya:

var refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.Alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in
  print("Handle Ok logic here")
  }))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action: UIAlertAction!) in
  print("Handle Cancel Logic here")
  }))

presentViewController(refreshAlert, animated: true, completion: nil)

Seperti yang Anda lihat penangan blok untuk UIAlertAction menangani penekanan tombol. Tutorial yang bagus ada di sini (meskipun tutorial ini tidak ditulis menggunakan swift): http://hayageek.com/uialertcontroller-example-ios/

Pembaruan Swift 3:

let refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action: UIAlertAction!) in
    print("Handle Ok logic here")
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action: UIAlertAction!) in
    print("Handle Cancel Logic here")
}))

present(refreshAlert, animated: true, completion: nil)

Pembaruan Swift 5:

let refreshAlert = UIAlertController(title: "Refresh", message: "All data will be lost.", preferredStyle: UIAlertControllerStyle.alert)

refreshAlert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action: UIAlertAction!) in
      print("Handle Ok logic here")
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action: UIAlertAction!) in
      print("Handle Cancel Logic here")
}))

present(refreshAlert, animated: true, completion: nil)
Michael Wildermuth
sumber
4
Anda dapat menggunakan the UIAlertActionStyle.Canceldaripada .Defaultdalam contoh Anda.
Tristan Warner-Smith
Jika saya tidak ingin melakukan apa pun dalam tindakan Batal, saya tidak dapat mengembalikan apa pun?
Gabriel Rodrigues
Tentu saja, secara teknis, saya tidak melakukan apa pun dalam contoh ini kecuali logging. Tetapi jika saya menghapus log, saya tidak akan melakukan apa-apa.
Michael Wildermuth
1
sangat hebat ketika jawaban diperbarui untuk versi Swift yang lebih baru
BlackTigerX
ada yang tahu cara menambahkan ID aksesibilitas ke tindakan "ok" dan "batal"
Kamaldeep singh Bhatia
18
var refreshAlert = UIAlertController(title: "Log Out", message: "Are You Sure to Log Out ? ", preferredStyle: UIAlertControllerStyle.Alert)

refreshAlert.addAction(UIAlertAction(title: "Confirm", style: .Default, handler: { (action: UIAlertAction!) in
    self.navigationController?.popToRootViewControllerAnimated(true)
}))

refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: { (action: UIAlertAction!) in

    refreshAlert .dismissViewControllerAnimated(true, completion: nil)


}))

presentViewController(refreshAlert, animated: true, completion: nil)
AG
sumber
4

Diperbarui untuk swift 3:

// definisi fungsi:

@IBAction func showAlertDialog(_ sender: UIButton) {
        // Declare Alert
        let dialogMessage = UIAlertController(title: "Confirm", message: "Are you sure you want to Logout?", preferredStyle: .alert)

        // Create OK button with action handler
        let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
             print("Ok button click...")
             self.logoutFun()
        })

        // Create Cancel button with action handlder
        let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (action) -> Void in
            print("Cancel button click...")
        }

        //Add OK and Cancel button to dialog message
        dialogMessage.addAction(ok)
        dialogMessage.addAction(cancel)

        // Present dialog message to user
        self.present(dialogMessage, animated: true, completion: nil)
    }

// definisi fungsi logoutFun ():

func logoutFun()
{
    print("Logout Successfully...!")
}
Kiran jadhav
sumber
3

Anda dapat dengan mudah melakukan ini dengan menggunakan UIAlertController

let alertController = UIAlertController(
       title: "Your title", message: "Your message", preferredStyle: .alert)
let defaultAction = UIAlertAction(
       title: "Close Alert", style: .default, handler: nil)
//you can add custom actions as well 
alertController.addAction(defaultAction)

present(alertController, animated: true, completion: nil)

.

Referensi: iOS Show Alert

Shaba Aafreen
sumber
0

Anda mungkin ingin mempertimbangkan untuk menggunakan SCLAlertView , alternatif untuk UIAlertView atau UIAlertController .

UIAlertController hanya berfungsi di iOS 8.x atau lebih tinggi, SCLAlertView adalah opsi yang baik untuk mendukung versi yang lebih lama.

github untuk melihat detailnya

contoh:

let alertView = SCLAlertView()
alertView.addButton("First Button", target:self, selector:Selector("firstButton"))
alertView.addButton("Second Button") {
    print("Second button tapped")
}
alertView.showSuccess("Button View", subTitle: "This alert view has buttons")
Soon Khai
sumber