2017-04-15 103 views
2

我一直在寻找网络,我无法找到解决我的问题的方法。一旦游戏结束,我希望我的“开始”按钮文本更改为“重新启动”。 如果需要任何其他信息,请让我知道。谢谢,所有帮助表示赞赏。以下是我的代码。Swift 3更改UIButton的标题

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

你的按钮必须是一个IBOutlet而非IBAction为。当您按住Ctrl键从Interface Builder中的代码,请确保您选择了“出口”选项,如下图所示:

IB - Code illustration

然后你可以改变按钮的标题是这样的:

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

嗨,那仍然不适合我。我收到此错误消息https://gyazo.com/497f8a364581d40b3cafc5c7f1fb46a3 –

+0

显示您实例化按钮的代码。听起来不像你正在做的那样 – toddg

+0

@IBAction func startButton(){ } –

3

您的某些标签已经有IBOutlets

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

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

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

IBaction是一个函数,当用户与控件(按钮,你几乎总是连接动作到.touchUpInside控制事件。)

与名字命名你的行动像pinkButton是一个坏主意,并导致混乱。我建议重命名你的行为动词,如handlePinkButton(或者“pinkBut​​tonTapped”,但我更喜欢动作名称是动词。)

注意,当你重命名IBAction和/或IBOutlet你必须进入IB(IB = Interface Builder),选择连接检查器,删除现在不正确的IBOutlet/IBAction和控件 - 从对象拖动到更新的插座/操作。

如果你不这样做,你会得到在运行时非常混乱崩溃:

  • 重命名代码IBOutlets也没有改变他们在IB给出了错误“这一类不是键值coding-当您尝试从故事板加载视图控制器时,“old_outlet_name”(其中“old_outlet_name”将成为您插座的旧名称)。重命名操作)

  • 重新命名代码IBActions不也改变它们在IB提供了一个错误“无法识别的选择发送到实例big_hex_number”当您尝试轻按按钮(或触发其他控件的动作。)

您应该在主编辑器中打开故事板,并在助理编辑器中打开源代码,然后从您的IB按钮控制拖动到您的源代码中,在您班级顶部的其他出口下方。