Swift ';UIButton.titleLabel?.text';不';未按预期工作/不';不覆盖字符串
我的问题如下:Swift ';UIButton.titleLabel?.text';不';未按预期工作/不';不覆盖字符串,swift,uibutton,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.titl
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
}
我正在尝试将按钮的文本重置为零(空/无文本),以重新启动游戏。这一切都很好,但当涉及到“func resetButtons()”-方法时,它会将按钮中的可见文本设置为nil,但不知何故,文本仍然是“X”或“O”
我曾尝试在resetButtons()方法中使用button1.setTitle(nil)和其他不同的文字,但它没有改变任何事情。我还尝试将设置从.System更改为Custom-也不起作用。
每次我调试它并转到断点时,它都会显示在“resetButton()”之后仍然应该更改按钮文本,它仍然是“X”或“O”,但很明显按钮是空的,因为它应该是空的。。。真奇怪
我发现问题可能是,当我首先设置按钮文本时,它是“sender.titleLabel?.text”,而不是“button1.titleLabel?.text”。这真的是问题所在吗
提前谢谢 您可以使用空字符串:
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()
}
}
正如我前面解释的,不要将nil用于空字符串。以下内容适合我。此外,(扫描文档后)还发现,
ui按钮.标题标签
是只读的。它自己的属性是读/写的,但是标题标签本身是只读的,因此为什么必须使用setTitle
,为什么使用sender.titleLabel?.text
在if
语句中不起作用。尝试以下方法
override func viewDidLoad() {
super.viewDidLoad()
resetButtons()
}
func CheckWin() -> Bool
{
if button1.title(for: .normal) == button2.title(for: .normal) && button2.title(for: .normal) == button3.title(for: .normal) && button1.title(for: .normal) != ""
{
return true
}
else
{
return false
}
}
@IBAction func buttonClick(_ sender: UIButton)
{
if sender.title(for: .normal) == ""
{
if player%2==0
{
sender.setTitle("X", for: .normal)
player += 1
turn += 1
label.text = "Player 'O' Turn"
}
else
{
sender.setTitle("O", for: .normal)
player += 1
turn += 1
label.text = "Player 'X' Turn"
}
}
if CheckWin()
{
resetButtons()
}
}
func resetButtons() {
button1.setTitle("", for: .normal)
button2.setTitle("", for: .normal)
button3.setTitle("", for: .normal)
}
如果外观正确,则调试器可能在欺骗您。这不是第一次发生在某人身上,很难解释。它将按钮。文本按我的要求设置为(空)。但是,当我再次单击按钮时,已经存储了一个值。它向我显示一个“X”或“O”,并且它不再在按钮上存储文本。我以前尝试过,但这会按照我的意愿重置按钮,但它不会让我再次单击按钮…因为你正在控制按钮文本,如果它们为零或否。如果您使用sender.titleLabel?.text=''控制它们,它将不再给出错误。我已经更新了答案。这与我的答案相同。@kkakkurt,对不起,是的。当我把它贴出来的时候,我抓到了。我修改了我的答案。非常感谢!终于成功了!你们两个!非常感谢你!你真让我高兴!很高兴听到这个消息。请接受其中一个答案。不管是哪一个-你的问题也帮我解决了问题。@Magnas,好了!再次感谢,很高兴听到这也帮了你一点忙。祝您有个美好的一天!