如何在Swift(iOS 7)中为UIAlertView添加动作

7
我想为“重试”按钮添加一个操作,但当用户按下“重试”按钮时没有任何反应。
var createAccountErrorAlert: UIAlertView = UIAlertView()

createAccountErrorAlert.delegate = self                

createAccountErrorAlert.title = "Oops"
createAccountErrorAlert.message = "Could not create account!"
createAccountErrorAlert.addButtonWithTitle("Dismiss")
createAccountErrorAlert.addButtonWithTitle("Retry")

createAccountErrorAlert.show()

确定按下按钮的索引函数?

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

    switch buttonIndex{

    case 1:
        createAccount()

    default:
        //Some code here..

    }
}

你尝试过如何调试这个问题吗?你是否在函数内设置了断点以查看它是否触发?你是否添加了日志语句以查看 buttonIndex 是什么?这些是我需要做的第一件事情,以便复制你遇到的错误。 - wjl
4个回答

22
我测试了你的代码,它对我来说运行良好,打印出相应的结果:
func showAlert(){
    var createAccountErrorAlert: UIAlertView = UIAlertView()

    createAccountErrorAlert.delegate = self

    createAccountErrorAlert.title = "Oops"
    createAccountErrorAlert.message = "Could not create account!"
    createAccountErrorAlert.addButtonWithTitle("Dismiss")
    createAccountErrorAlert.addButtonWithTitle("Retry")

    createAccountErrorAlert.show()
}

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

    switch buttonIndex{

    case 1:
        NSLog("Retry");
    break;
    case 0:
        NSLog("Dismiss");
        break;
    default:
        NSLog("Default");
        break;
        //Some code here..

    }
}

当我点击关闭按钮时,它会打印出 dismiss。


对于那些可能遇到问题的人:如果您使用“var createAccountErrorAlert= UIAlertView()”,它将无法正常工作。 - kommradHomer

0
这是我用更短的代码行完成的方法:
func showAlert(){
    var alert = UIAlertView(title: "Choose", message: "Which_pill", delegate: self, cancelButtonTitle:"Red")
    alert.addButtonWithTitle("Blue")
    alert.show()
}

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){
    switch buttonIndex{
    case 1: println("Blue")
    case 0: println("Red")
    default: println("Is this part even possible?")
    }
}

0
这是因为您的重试按钮的索引是1,而不是0。关闭按钮的索引是0。
如果您将以下代码放入播放器中,您实际上会看到按钮的索引(如addButtonWithTitle方法中所记录的)。
var createAccountErrorAlert: UIAlertView = UIAlertView()
createAccountErrorAlert.title = "Oops"
createAccountErrorAlert.message = "Could not create account!"
createAccountErrorAlert.addButtonWithTitle("Dismiss") //Prints 0
createAccountErrorAlert.addButtonWithTitle("Retry") //Prints 1

当我尝试您的代码时,它确实起作用。您能否在createAccount()方法中发送代码?或者尝试@wjl建议的,在委托方法中设置断点,并检查索引值。或者在委托方法中放置"println(buttonIndex)",并查看在点击重试按钮时控制台上打印的内容。 - Mike Seghers

0

索引错误。以下代码(基于iOS单视图默认应用程序模板)适用于我(我将按钮连接到触发@IBAction buttonPressed)。不要忘记将您的视图控制器设置为UIAlertViewDelegate(尽管以下代码无需这样做):

import UIKit

class ViewController: UIViewController, UIAlertViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func buttonPressed(sender : AnyObject) {
        var createAccountErrorAlert: UIAlertView = UIAlertView()

        createAccountErrorAlert.delegate = self

        createAccountErrorAlert.title = "Oops"
        createAccountErrorAlert.message = "Could not create account!"
        createAccountErrorAlert.addButtonWithTitle("Dismiss")
        createAccountErrorAlert.addButtonWithTitle("Retry")

        createAccountErrorAlert.show()
    }

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

        switch buttonIndex {

        default:
            println("alertView \(buttonIndex) clicked")

        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接