Schnelle Alarmansicht mit OK und Abbrechen: Welche Schaltfläche wurde gedrückt?

105

Ich habe eine in Swift geschriebene Warnansicht in Xcode und möchte bestimmen, welche Schaltfläche der Benutzer ausgewählt hat (es handelt sich um einen Bestätigungsdialog), um nichts zu tun oder etwas auszuführen.

Derzeit habe ich:

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

Ich benutze wahrscheinlich die Tasten falsch, bitte korrigieren Sie mich, da dies alles neu für mich ist.

B_s
quelle

Antworten:

302

Wenn Sie iOS8 verwenden, sollten Sie UIAlertController verwenden - UIAlertView ist veraltet .

Hier ist ein Beispiel für die Verwendung:

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)

Wie Sie sehen können, drücken die Blockhandler für die UIAlertAction die Taste. Ein großartiges Tutorial finden Sie hier (obwohl dieses Tutorial nicht mit Swift geschrieben wurde): http://hayageek.com/uialertcontroller-example-ios/

Swift 3 Update:

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 Update:

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
quelle
4
Sie könnten das UIAlertActionStyle.Canceleher als .Defaultin Ihrem Beispiel verwenden.
Tristan Warner-Smith
Wenn ich in Aktion Abbrechen nichts tun möchte, kann ich nichts zurückgeben?
Gabriel Rodrigues
Technisch gesehen mache ich im Beispiel natürlich nichts anderes als Protokollierung. Aber wenn ich das Protokoll entfernen würde, würde ich nichts tun.
Michael Wildermuth
1
Es ist großartig, wenn die Antworten für die neueren Swift-Versionen aktualisiert werden
BlackTigerX
Jeder weiß, wie man Zugänglichkeits-ID zu "
OK
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
quelle
4

Aktualisiert für Swift 3:

// Funktionsdefinition:

@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 () Funktionsdefinition:

func logoutFun()
{
    print("Logout Successfully...!")
}
Kiran Jadhav
quelle
3

Sie können dies einfach mit UIAlertController tun

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)

.

Referenz: iOS Show Alert

Shaba Aafreen
quelle
0

Möglicherweise möchten Sie SCLAlertView verwenden , eine Alternative für UIAlertView oder UIAlertController .

UIAlertController funktioniert nur unter iOS 8.x oder höher. SCLAlertView ist eine gute Option zur Unterstützung älterer Versionen.

Github , um die Details zu sehen

Beispiel:

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")
Bald Khai
quelle