UIButton采取不同的行动

时间:2015-09-26 13:55:54

标签: swift uibutton swift2

我希望 1 按钮具有不同的操作。当我第一次点击按钮时,只应更改按钮名称。当我再次点击时,我想显示第一个ViewController。

我的问题是,当我第一次点击它时会立即显示第一个ViewController。你能帮帮我吗?

由于

@IBAction func startPressed(sender: UIButton) {
    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let vc: ViewController1 = storyboard.instantiateViewControllerWithIdentifier("firstView") as! ViewController1

    var m: Bool?
    m = true
    if (m == true) {
        startPressed2.setTitle("Try Again", forState: .Normal)
        m = false
    }
    if (m == false) {
        self.presentViewController(vc, animated: true, completion: nil)
    }
}

2 个答案:

答案 0 :(得分:1)

该代码存在批次问题。

一个问题是m是一个纯粹的局部变量,因此每次调用true时都会创建并设置为startPressed

相反,通过在任何方法的外部声明它来将其提升为实例属性。现在它会持续存在,因此您可以在下次调用startPressed时再次检查它。

另外,你的可选在这里很傻;没有理由不使用Optionals。另外,您可以一次定义和初始化所有内容,而且您不需要显式类型。

所以:

var m = true
@IBAction func startPressed(sender: UIButton) {

另外,永远不要将Bool与truefalse进行比较; Bool 的条件。而且你不需要括号。

最后,如果m为真时你想要做的就是设置标题,那么你需要停止。您可以使用returnelse

执行此操作
if m {
    startPressed2.setTitle("Try Again", forState: .Normal)
    m = false
} else {
    self.presentViewController(vc, animated: true, completion: nil)
}

答案 1 :(得分:0)

这种情况正在发生,因为当您播放代码时,m = false语句在第一个if中执行,之后第二个if条件正确if (m == false),因此它将播放下面的代码。

试试这个:

var m:Bool = true

@IBAction func startPressed(sender: UIButton) {
    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let vc: ViewController1 = storyboard.instantiateViewControllerWithIdentifier("firstView") as! ViewController1

    if (m == true) {
        startPressed2.setTitle("Try Again", forState: .Normal)
        m = false
    }else{
        self.presentViewController(vc, animated: true, completion: nil)
    }

}