Swift 3改变了UIButton

时间:2017-04-15 15:19:49

标签: ios swift swift3 uibutton

我一直在寻找网络,我无法找到解决问题的方法。一旦游戏结束,我希望我的“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)
}

}

2 个答案:

答案 0 :(得分:3)

您的某些标签已经有IBOutlets

对于按钮,您可能需要同时设置IBactionIBOutlet

IBOutlet是一件事。一个名词。它是对视图对象的引用。

IBAction是一个动词。一种行为。它是在UIControl发生某些事情时调用的代码(点击按钮,移动滑块,更改分段控件上的选定值等)

IBaction是一个在用户与控件交互时被调用的函数(对于几乎总是将操作链接到.touchUpInside控件事件的按钮。)

使用pinkButton之类的名称命名您的操作是一个坏主意,并导致混淆。我建议将你的动作重命名为动词,例如handlePinkButton(或者可能是“pinkBut​​tonTapped”,但我更喜欢动作名称是动词。)

请注意,当您重命名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)

您的按钮需要是IBOutlet而不是IBAction。当您从Interface Builder按住Ctrl键拖动到代码时,请确保选择“Outlet”选项,如下所示:

IB - Code illustration

然后您可以像这样更改按钮标题:

else {
    startButton.setTitle("Button Title", for: .normal)
    stopFuncs = true
}