' UIButton.titleLabel的.text'没有按预期工作/没有覆盖字符串

时间:2017-04-27 13:21:41

标签: swift uibutton

我的问题如下:

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"。这真的是问题吗?

提前致谢!

2 个答案:

答案 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()
    }
}