2016-11-01 4 views
0

私は、スコアを表示するはずのラベルと、それが押されるたびにそのスコアを増やすはずのボタンを持っています。私の問題は、どこに機能を置いてもエラーが出るということです。Swift 3:UILabelとして表示される変数を増やして、UILabelをプログラムで更新するにはどうすればよいですか?

私はviewDidLoadクラスの上に関数があると、それは私のラベルの前に来るのでエラーが発生しますが、viewDidLoadのどこにでも置くと、ローカル関数を呼び出せないのでエラーが出ます。その後どこにでも置くと、関数を呼び出すボタンが関数の前に来る。

私はこれらのことをどこに置くのですか?これをすべて一緒にするより良い方法はありますか?これは、あなたがviewDidLoad(のようなincreasingNum)の外にあなたのラベルを定義する必要があります...そう簡単なこと

import UIKit 

class ViewController: UIViewController { 

let phrase = "Your score: " 
var increasingNum = 0 

func scoreGoUp (sender: UIButton){ 

    increasingNum += 1 
    label.text = "\(phrase) \(increasingNum)" 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let label = UILabel(frame: CGRect(x: self.view.frame.size.width/2 - 100, y: self.view.frame.size.height/2 - 10, width: 200, height: 20)) 
    label.textAlignment = .center 
    label.text = "\(phrase) \(increasingNum)" 
    self.view.addSubview(label) 

    let button = UIButton(frame: CGRect(x: self.view.frame.size.width/2 - 150, y: 100, width: 300, height: 50)) 
    button.backgroundColor = UIColor.cyan 
    button.addTarget(self, action: #selector(scoreGoUp), for: .touchUpInside) 
    self.view.addSubview(button) 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

} 

答えて

0

の内側にのみ表示されます私はあなたのコードをクリアしました。問題は、あなたがあなたを追跡していないということでした。UILabel。クラス内にlabelが表示されるように宣言してください。

import UIKit 

class ViewController: UIViewController { 

    let phrase = "Your score: " 
    var increasingNum = 0 
    var label: UILabel? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let label = UILabel(frame: CGRect(x: self.view.frame.size.width/2 - 100, y: self.view.frame.size.height/2 - 10, width: 200, height: 20)) 
     label.textAlignment = .center 
     label.text = "\(phrase) \(increasingNum)" 
     self.view.addSubview(label) 
     self.label = label 

     let button = UIButton(frame: CGRect(x: self.view.frame.size.width/2 - 150, y: 100, width: 300, height: 50)) 
     button.backgroundColor = UIColor.cyan 
     button.addTarget(self, action: #selector(scoreGoUp), for: .touchUpInside) 
     self.view.addSubview(button) 

    } 

    func scoreGoUp (sender: UIButton){ 
     increasingNum += 1 
     self.label?.text = "\(phrase) \(increasingNum)" 
    } 
} 

1

を想定した、現時点では、あなたのlabel変数はviewDidLoad

var label:UILabel! 
2

私はあなたのコードを変更しました。これがあなたのお役に立てば幸いです。

class ViewController: UIViewController { 

var label:UILabel! 
    let phrase = "Your score: " 
    var increasingNum = 0 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     label = UILabel(frame: CGRect(x: self.view.frame.size.width/2 - 100, y: self.view.frame.size.height/2 - 10, width: 200, height: 20)) 
     label.textAlignment = .center 
     label.text = "\(phrase) \(increasingNum)" 
     self.view.addSubview(label) 

     let button = UIButton(frame: CGRect(x: self.view.frame.size.width/2 - 150, y: 100, width: 300, height: 50)) 
     button.backgroundColor = UIColor.cyan 
     button.addTarget(self, action: #selector(scoreGoUp), for: .touchUpInside) 

     self.view.addSubview(button) 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

    } 

    func scoreGoUp (sender: UIButton){ 

     increasingNum += 1 
     label.text = "\(phrase) \(increasingNum)" 

    } 
} 

Here is the output

関連する問題