使用UIAlertView取消触摸

时间:2016-06-29 05:46:02

标签: ios swift uialertcontroller

我正在建造一个游戏。

此游戏有UITableViewController作为设置&选项功能。

您可以选择的一个选项是将对手从传球切换到AI(或其他方式)。

我想要做的是使用UIAlertController截取触摸,检查正在进行的游戏,并提示用户取消更改或继续。

我已经在override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)函数中实现了代码。

我的代码如下:

if indexPath.section == 1 {

    // Here we need to detect a game in progress and ask for a confirmation before switching to another mode.
    if getGameInProgress() == true {

        // Display choice dialog
        alert = UIAlertController (title: alertCaption, message: alertMessage, preferredStyle: .Alert)

        let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: {(action: UIAlertAction) -> Void in
            self.alert.dismissViewControllerAnimated(true, completion: { _ in })
            return
        })
        alert.addAction(cancelAction)

        let ok: UIAlertAction = UIAlertAction(title: "Confirm", style: .Default, handler: {(action: UIAlertAction) -> Void in
            self.alert.dismissViewControllerAnimated(true, completion: { _ in })
            // Do nothing, just let the touch method continue...
        })
        alert.addAction(ok)

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


    if indexPath.row == 0 {
        // "Pass and Play"
        setOpponentPreference("Pass and Play")
    }

    if indexPath.row == 1 {
        // "Virtual Robert"
        setOpponentPreference("Virtual Robert")
    }

    if indexPath.row == 2 {
        // "Virtual Nathan"
        setOpponentPreference("Virtual Nathan")
    }

    // No matter which difficulty selected:
    gameboard.setDifficulty()
    // Create a method to reset the game, but without fading out the menu screen (the current new game method takes you directly to the game. The player may not want that in this instance.)
}

我遇到的问题是警报控制器显示并等待输入,但它不会阻止didSelectRowAtIndexPath函数形式的其余部分继续。

在处理单元格上的触摸之前,如何接收用户输入?

2 个答案:

答案 0 :(得分:1)

抱歉英语不好。我从你的问题中了解到,你想让程序继续执行,直到用户从UIAlertController中选择一个按钮。

您需要做的是在“确定”按钮或“取消”按钮的操作中执行任务。

if getGameInProgress() == true {

                    // Display choice dialog
                    alert = UIAlertController (title: alertCaption, message: alertMessage, preferredStyle: .Alert)

                    let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: {(action: UIAlertAction) -> Void in
                        self.alert.dismissViewControllerAnimated(true, completion: { _ in })
                        return
                    })
                    alert.addAction(cancelAction)

                    let ok: UIAlertAction = UIAlertAction(title: "Confirm", style: .Default, handler: {(action: UIAlertAction) -> Void in

                     //Do something in here like print 
                      println("Confirm Button Pressed")



                        self.alert.dismissViewControllerAnimated(true, completion: { _ in })
                        // Do nothing, just let the touch method continue...
                    })
                    alert.addAction(ok)

                    self.presentViewController (alert, animated: true, completion: nil)
                }
希望它有所帮助。

答案 1 :(得分:1)

您好所需要的只是将您的代码放在完成部分中,以便"确认"选项,只有当用户点击"确认"您UIAlertViewController

的按钮
self.alert.dismissViewControllerAnimated(true, completion: { _ in })
                        // Do nothing, just let the touch method continue...
                    })

所以你的代码必须是

if indexPath.section == 1 {

    // Here we need to detect a game in progress and ask for a confirmation before switching to another mode.
    if getGameInProgress() == true {

        // Display choice dialog
        alert = UIAlertController (title: alertCaption, message: alertMessage, preferredStyle: .Alert)

        let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: {(action: UIAlertAction) -> Void in
            self.alert.dismissViewControllerAnimated(true, completion: { _ in })
            return
        })
        alert.addAction(cancelAction)

        let ok: UIAlertAction = UIAlertAction(title: "Confirm", style: .Default, handler: {(action: UIAlertAction) -> Void in
            self.alert.dismissViewControllerAnimated(true, completion: { _ in })

      if indexPath.row == 0 {
        // "Pass and Play"
        setOpponentPreference("Pass and Play")
        }

     if indexPath.row == 1 {
        // "Virtual Robert"
        setOpponentPreference("Virtual Robert")
      }

    if indexPath.row == 2 {
        // "Virtual Nathan"
        setOpponentPreference("Virtual Nathan")
    }

    // No matter which difficulty selected:
    gameboard.setDifficulty()
    // Create a method to reset the game, but without fading out the menu screen (the current new game method takes you directly to the game. The player may not want that in this instance.)
        })
        alert.addAction(ok)

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

}

我希望这对你有所帮助,对我来说很有意义,问候