Tamam ve İptal ile hızlı uyarı görünümü: hangi düğmeye dokunuldu?


105

Xcode'da Swift ile yazılmış bir uyarı görünümüm var ve kullanıcının hiçbir şey yapmamak veya bir şey yürütmek için hangi düğmeyi seçtiğini (bu bir onay diyalogudur) belirlemek istiyorum.

Şu anda elimde:

@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()
}

Muhtemelen düğmeleri yanlış kullanıyorum, lütfen beni düzeltin çünkü bunlar benim için tamamen yeni.


Yanıtlar:


304

İOS8 kullanıyorsanız, UIAlertController kullanmalısınız - UIAlertView kullanımdan kaldırılmıştır .

İşte nasıl kullanılacağına dair bir örnek:

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)

Gördüğünüz gibi, UIAlertAction için blok işleyicileri düğme basışlarını idare ediyor. Harika bir öğretici burada (bu eğitim swift kullanılarak yazılmamış olsa da): http://hayageek.com/uialertcontroller-example-ios/

Swift 3 güncellemesi:

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)

Swift 5 güncellemesi:

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)

4
Sen yararlanabilecek UIAlertActionStyle.Cancelyerine .Defaultsizin örnekte.
Tristan Warner-Smith

İptal eyleminde hiçbir şey yapmak istemiyorsam hiçbir şey iade edemem?
Gabriel Rodrigues

Elbette teknik olarak, örnekte günlük kaydı dışında hiçbir şey yapmıyorum. Ama günlüğü kaldırırsam hiçbir şey yapmazdım.
Michael Wildermuth

1
yeni Swift sürümleri için yanıtlar güncellendiğinde harika
BlackTigerX

"Tamam" ve "iptal" işlemlerine nasıl erişilebilirlik kimliği ekleyeceğini bilen herkes
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)

4

Swift 3 için güncellendi:

// işlev tanımı:

@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)
    }

// logoutFun () işlev tanımı:

func logoutFun()
{
    print("Logout Successfully...!")
}

3

Bunu UIAlertController kullanarak kolayca yapabilirsiniz

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)

.

Referans: iOS Uyarı Göster


0

Sen kullanarak düşünebilirsiniz SCLAlertView için, alternatif UIAlertView veya UIAlertController .

UIAlertController yalnızca iOS 8.x veya üzerinde çalışır, SCLAlertView eski sürümü desteklemek için iyi bir seçenektir.

ayrıntıları görmek için github

misal:

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")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.