为什么Swift中的用户警报代码不按预期工作

时间:2016-02-10 13:35:46

标签: swift

我的应用中有一个重置按钮。我编写了它,以便如果用户点击它来重置应用程序,他们首先会显示用户警报。此警报提供信息并提供两种选择:(1)取消,(2)继续。

这个想法是,如果他们点击取消,游戏将不会重置。但如果他们点击继续,游戏将重置。

问题1

目前,当用户点击重置按钮时,游戏会立即重置,然后显示警告。显示警报后,如果他们点击“取消”则不会再发生任何事情,但如果他们点击“继续”,游戏将再次重置!

因此,从表面上看,警报按钮可以正常工作 - 只需点击重置图标就可以在警报出现之前执行重置操作。

第2期

我的警报代码适合iOS 8及以上用户以及iOS 8之前的用户。如何更改代码的这一部分,以便为iOS 8之前的用户提供“取消”或“继续”功能?目前他们只是获得了“继续”选项。

我的警报代码如下:

@IBAction func buttonResetGame(sender: UIButton) {

    if #available(iOS 8.0, *) {
        let alert = UIAlertController(title: "Info", message: "This will reset your score and questions.", preferredStyle: UIAlertControllerStyle.Alert)

        // add the Continue button and action
        alert.addAction(UIAlertAction(title: "Continue", style: UIAlertActionStyle.Destructive, handler: {action in

            // do this...
            self.ResetGame()
        }))

        // add the Cancel button and action
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))

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


    }else{
        // For pre-iOS 8 users
        let alert = UIAlertView()
        alert.title = "Info"
        alert.message = "This will reset your score and questions."
        alert.addButtonWithTitle("Continue")
        alert.show()
    }
    ResetGame()

}

如果相关,我的重置游戏代码如下:

func ResetGame() {
    PlaySoundReset()
    score = 0
    totalquestionsasked = 0
    SaveScore()
    LoadScore()
}

1 个答案:

答案 0 :(得分:1)

在if / else:

之后删除额外的ResetGame()调用
@IBAction func buttonResetGame(sender: UIButton) {

    if #available(iOS 8.0, *) {
        let alert = UIAlertController(title: "Info", message: "This will reset your score and questions.", preferredStyle: UIAlertControllerStyle.Alert)

        // add the Continue button and action
        alert.addAction(UIAlertAction(title: "Continue", style: UIAlertActionStyle.Destructive, handler: {action in

            // do this...
            self.ResetGame()
        }))

        // add the Cancel button and action
        alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))

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


    }else{
        // For pre-iOS 8 users
        let alert = UIAlertView()
        alert.title = "Info"
        alert.message = "This will reset your score and questions."
        alert.addButtonWithTitle("Continue")
        alert.show()
    }
    ResetGame() //remove this line ? You are calling the RestGame func...

}

对于问题的第二部分,您需要将警报视图的委托设置为“self”或其他,然后实现UIAlertViewDelegate方法:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex NS_DEPRECATED_IOS(2_0, 9_0);

按钮索引将为您提供每个按钮,即0和1。