如何在 Swift 的警报中为按钮添加操作

Posted

技术标签:

【中文标题】如何在 Swift 的警报中为按钮添加操作【英文标题】:How to add action to buttons in Alert in Swift 【发布时间】:2014-07-04 23:42:47 【问题描述】:

我是初级程序员。我正在尝试向警报按钮添加操作,但它不起作用。我只是想测试一下警报按钮选择是否可以更改标签中的文本,但它不起作用。当然我可以很好地看到警报和按钮,但是单击按钮后没有任何反应。

@IBOutlet var statusLabelAlert : UILabel

var alertTest = UIAlertView()

@IBAction func alertButton(sender : AnyObject) 

    alertTest.message = "Select one!"
    alertTest.addButtonWithTitle("1st")
    alertTest.addButtonWithTitle("2nd")
    alertTest.addButtonWithTitle("3rd")
    alertTest.title = "Test Alert"
    alertTest.show()


func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)
    switch buttonIndex
    case 0:
        statusLabelAlert.text = "1st"
    case 1:
        statusLabelAlert.text = "2nd"
    case 2:
        statusLabelAlert.text = "3rd"
    default:
        statusLabelAlert.text = "error"
    


【问题讨论】:

【参考方案1】:

您的 clickedButtonAtIndex 方法是否在调用?设置断点并调试代码。 你没有设置 alertView 的委托。

@IBOutlet var statusLabelAlert : UILabel

var alertTest = UIAlertView()
alertTest.delegate = self   //set the delegate of alertView

@IBAction func alertButton(sender : AnyObject) 

alertTest.message = "Select one!"
alertTest.addButtonWithTitle("1st")
alertTest.addButtonWithTitle("2nd")
alertTest.addButtonWithTitle("3rd")
alertTest.title = "Test Alert"
alertTest.show()


func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)
switch buttonIndex
case 0:
    statusLabelAlert.text = "1st"
case 1:
    statusLabelAlert.text = "2nd"
case 2:
    statusLabelAlert.text = "3rd"
default:
    statusLabelAlert.text = "error"



【讨论】:

【参考方案2】:

您必须设置警报视图的委托:

alertTest.delegate = self

UIAlertView 使用delegate pattern,这意味着它调用其委托上的方法来实现某些事情或通知事件。对于UIAlertView,其中一个事件是用户点击按钮时。要让警报视图知道向谁报告用户的点击,您必须指定一个实现UIAlertViewDelegate 协议的委托。您的代码实现了协议,但它从未告诉警报您想成为它的委托人,因此您永远不会收到方法调用。

【讨论】:

【参考方案3】:
@IBOutlet var statusLabelAlert : UILabel
var alertTest = UIAlertView()
@IBAction func alertButton(sender : AnyObject)

    alertTest.delegate = self
    alertTest.message = "Select one!"
    alertTest.addButtonWithTitle("1st")
    alertTest.addButtonWithTitle("2nd")
    alertTest.addButtonWithTitle("3rd")
    alertTest.title = "Test Alert"
    alertTest.show()



func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)

    switch buttonIndex
    
        case 0:
        statusLabelAlert.text = "1st"
        case 1:
        statusLabelAlert.text = "2nd"
        case 2:
        statusLabelAlert.text = "3rd"
        default:
        statusLabelAlert.text = "error"
   

【讨论】:

【参考方案4】:
IBOutlet var statusLabelAlert : UILabel

@IBAction func alertButton(sender : AnyObject) 

let alert = UIAlertController(title: "Alert", message: "This is an Alert", preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "1st", style: UIAlertActionStyle.Default, handler:  (action: UIAlertAction!) in
statusLabelAlert.text = "1st" 
))

alert.addAction(UIAlertAction(title: "2nd", style: UIAlertActionStyle.Default, handler:  (action: UIAlertAction!) in
statusLabelAlert.text = "2nd" 
))

self.presentViewController(alert, animated: true, completion: nil)


如果你不想在按下按钮时做某事:

alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: nil))

【讨论】:

【参考方案5】:

如果这适用于 ios 8,您应该切换到 UIAlertController 和 UIAlertAction。 UIAlertAction 包含按钮应该做什么。

【讨论】:

以上是关于如何在 Swift 的警报中为按钮添加操作的主要内容,如果未能解决你的问题,请参考以下文章

如何向 UILocalNotification 警报添加操作按钮/操作?

如何在swift / SwiftUI中为滑动手势设置菜单栏图标的操作

如何在 Swift 中为 UIBarButtonItem 设置动作

如何使用 Swift 2(Xcode 7)在我的 Sprite Kit 游戏中为背景音乐设置静音按钮?

如何在android中为警报对话框设置自定义字体?

如何向推送通知警报视图添加操作?