我的问题如下:
var player = 2
@IBOutlet weak var label: UILabel!
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!
func CheckWin() -> Bool
{
if button1.titleLabel?.text == button2.titleLabel?.text && button2.titleLabel?.text == button3.titleLabel?.text && button1.titleLabel?.text != nil
{
return true
}
else
{
return false
}
}
@IBAction func buttonClick(_ sender: UIButton)
{
if sender.titleLabel?.text == nil
{
if player%2==0
{
sender.setTitle("X", for: UIControlState.normal)
player += 1
turn += 1
label.text = "Player 'O' Turn"
}
else
{
sender.setTitle("O", for: UIControlState.normal)
player += 1
turn += 1
label.text = "Player 'X' Turn"
}
}
if CheckWin()
{
resetButtons()
}
}
func resetButtons() {
button1.titleLabel?.text = nil
button2.titleLabel?.text = nil
button3.titleLabel?.text = nil
}
我试图将Button的文本重置为nil(空/无文本),以重启游戏。这一切都很好但是当它涉及到" func resetButtons()" -Method它将按钮中的可见文本放到nil但不知何故文本仍然是" X"或者" O"。
我尝试在resetButtons() - Method中使用button1.setTitle(nil)和其他不同的着作,但它并没有改变一件事。我也尝试将设置从.System更改为自定义 - 也没有工作。 每次我调试它并去断点时它会显示仍然在" resetButton()"应该更改Buttontext它仍然是" X"或者" O",但显然按钮是空的,因为它应该是...它真的很奇怪。
我发现问题可能是,当我首先设置Button-text时,它是" sender.titleLabel?.text"而不是" button1.titleLabel?.text"。这真的是问题吗?
提前致谢!
答案 0 :(得分:1)
正如我之前解释的那样,不要使用nil作为空字符串。以下适用于我。事实证明(在扫描文档之后)UIButton.titleLabel
是只读的。它自己的属性是可读/写的,但titleLabel
本身是只读的,因此你必须使用setTitle
以及为什么使用sender.titleLabel?.text
不能在{{1}中工作声明。请尝试以下方法。
if
答案 1 :(得分:0)
您可以使用空字符串:
func resetButtons() {
button1.setTitle("", for: .normal)
button2.setTitle("", for: .normal)
button3.setTitle("", for: .normal)
}
然后改变你的if控件:
@IBAction func buttonClick(_ sender: UIButton)
{
if sender.titleLabel?.text == "" //Changed control mechanism
{
if player%2==0
{
sender.setTitle("X", for: UIControlState.normal)
player += 1
turn += 1
label.text = "Player 'O' Turn"
}
else
{
sender.setTitle("O", for: UIControlState.normal)
player += 1
turn += 1
label.text = "Player 'X' Turn"
}
}
if CheckWin()
{
resetButtons()
}
}