Быстрый просмотр предупреждений с помощью OK и Отмена: какая кнопка нажата?

105

У меня есть представление предупреждений в Xcode, написанное на Swift, и я хотел бы определить, какую кнопку выбрал пользователь (это диалоговое окно подтверждения), чтобы ничего не делать или что-то выполнить.

На данный момент у меня есть:

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

Я, наверное, неправильно использую кнопки, пожалуйста, поправьте меня, так как это все в новинку для меня.

B_s
источник
дублировать на stackoverflow.com/questions/24195310/…
Mixaz 01

Ответы:

305

Если вы используете iOS8, вы должны использовать UIAlertController - UIAlertView устарел .

Вот пример того, как его использовать:

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)

Как вы можете видеть, обработчики блоков для UIAlertAction обрабатывают нажатие кнопки. Здесь есть отличный учебник (хотя этот учебник написан не с использованием Swift): http://hayageek.com/uialertcontroller-example-ios/

Обновление 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)

Обновление 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)
Майкл Вильдермут
источник
4
Вы могли бы использовать, UIAlertActionStyle.Cancelа не .Defaultв своем примере.
Тристан Уорнер-Смит,
Если я не хочу ничего делать в действии «Отмена», я ничего не могу вернуть?
Габриэль Родригес
Конечно, технически я в этом примере ничего не делаю, кроме ведения журнала. Но если бы я удалил журнал, я бы ничего не делал.
Майкл Вильдермут
1
это так здорово, когда ответы обновляются для более новых версий Swift
BlackTigerX
кто-нибудь знает, как добавить идентификатор доступности к действиям «ОК» и «Отмена»
Камалдип Сингх Бхатия,
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
источник
4

Обновлено для Swift 3:

// определение функции:

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

func logoutFun()
{
    print("Logout Successfully...!")
}
Киран Джадхав
источник
3

Вы можете легко сделать это с помощью 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)

.

Ссылка: iOS Show Alert

Шаба Аафрин
источник
0

Вы можете рассмотреть возможность использования SCLAlertView , альтернативы UIAlertView или UIAlertController .

UIAlertController работает только на iOS 8.x и выше, SCLAlertView - хороший вариант для поддержки более старых версий.

github, чтобы увидеть подробности

пример:

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")
Сун Кхай
источник