我希望 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)
}
}
答案 0 :(得分:1)
该代码存在批次问题。
一个问题是m
是一个纯粹的局部变量,因此每次调用true
时都会创建并设置为startPressed
。
相反,通过在任何方法的外部声明它来将其提升为实例属性。现在它会持续存在,因此您可以在下次调用startPressed
时再次检查它。
另外,你的可选在这里很傻;没有理由不使用Optionals。另外,您可以一次定义和初始化所有内容,而且您不需要显式类型。
所以:
var m = true
@IBAction func startPressed(sender: UIButton) {
另外,永远不要将Bool与true
或false
进行比较; Bool 是的条件。而且你不需要括号。
最后,如果m
为真时你想要做的就是设置标题,那么你需要停止。您可以使用return
或else
:
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)
}
}