我一直在寻找网络,我无法找到解决问题的方法。一旦游戏结束,我希望我的“START”按钮文本更改为“RESTART”。 如果需要任何其他信息,请告知我们。谢谢,所有帮助表示赞赏。以下是我的代码。
class ViewController: UIViewController {
var gameOver = false
var stopFuncs = false
var gameTimer = Timer()
var counter = 10
var selected = "NONE"
var score = 0
var colour = "NONE"
@IBOutlet weak var colourLabel: UILabel!
let colourProvider = ColourProvider()
@IBOutlet weak var scoreLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
colour = colourProvider.randomColour()
print(colour)
colourLabel.text = colour
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBOutlet weak var counterLabel: UILabel!
func updateCounter() {
if counter >= 0 {
counterLabel.text = String(counter)
counter -= 1
}
}
@IBAction func startButton() {
gameOver = false
counter = 10
stopFuncs = false
var _ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateCounter), userInfo: nil, repeats: true)
}
@IBAction func greenButton() {
if stopFuncs { return }
compareColours(selectedColour: "GREEN")
changeColourLabel()
colourLabel.textColor = UIColor.green
}
@IBAction func blueButton() {
if stopFuncs { return }
compareColours(selectedColour: "BLUE")
changeColourLabel()
colourLabel.textColor = UIColor.blue
}
@IBAction func yellowButton() {
if stopFuncs { return }
compareColours(selectedColour: "YELLOW")
changeColourLabel()
colourLabel.textColor = UIColor.yellow
}
@IBAction func pinkButton() {
if stopFuncs { return }
compareColours(selectedColour: "GREEN")
changeColourLabel()
colourLabel.textColor = UIColor.red
}
func compareColours(selectedColour: String) {
if gameOver == false && counter >= 1 {
if selectedColour == colour {
score += 1
let scoreString = String(score)
scoreLabel.text = scoreString
}
else {
gameOver = true
}
}
else {
stopFuncs = true
}
}
func changeColourLabel() {
colour = colourProvider.randomColour()
colourLabel.text = colour
print(colour)
}
}
答案 0 :(得分:3)
您的某些标签已经有IBOutlets
。
对于按钮,您可能需要同时设置IBaction
和IBOutlet
。
IBOutlet
是一件事。一个名词。它是对视图对象的引用。
IBAction
是一个动词。一种行为。它是在UIControl
发生某些事情时调用的代码(点击按钮,移动滑块,更改分段控件上的选定值等)
IBaction
是一个在用户与控件交互时被调用的函数(对于几乎总是将操作链接到.touchUpInside控件事件的按钮。)
使用pinkButton
之类的名称命名您的操作是一个坏主意,并导致混淆。我建议将你的动作重命名为动词,例如handlePinkButton
(或者可能是“pinkButtonTapped”,但我更喜欢动作名称是动词。)
请注意,当您重命名IBAction
和/或IBOutlet
时,您必须进入IB(IB = Interface Builder),选择连接检查器,删除现在不正确的IBOutlet / IBAction并控制-drag从对象到更新的插座/动作。
如果你不这样做,你会在运行时遇到非常令人困惑的崩溃:
在代码中重命名IBOutlets
而不在IB中更改它们会给出错误“此类与密钥old_outlet_name不符合密码值编码”(其中“old_outlet_name”将是您的旧名称)当您尝试从故事板加载视图控制器时。)重命名行动)
在您尝试点击按钮(或触发其他控件的操作)时,在代码中重命名IBActions
而不在IB中更改它们会出现错误“无法识别的选择器发送到实例big_hex_number”。 p>
您应该在主编辑器中打开故事板并在助理编辑器中打开源代码,然后从IB中的按钮控制拖动到您班级顶部其他插座下方的源代码中。
答案 1 :(得分:2)