2017-02-08 6 views
0

私はSwiftには本当に新しく、私の最初のプロジェクトに取り組んでいます(私はJavascriptとWeb開発で少し経験があります)。私は問題に遭遇しました(異なるソリューションを試して4時間を過ごす)。Swift 3 - ボタンの状態に基づいたelse文

私はUIButtonがプッシュされると、FireBase(ON)に値を記録するアプリを持っています。 2度押すとデータベースにログ(OFF)します。

私はボタンをview.backgroundColorに変更し、それ以外の場合は色と結びつけるようにします。

しかし私は、私の人生にとってボタンの状態に基づいて私の他のものを構築する方法を考え出すことはできません。私は今、ボタン自体の色を変更しようとして、それにif elseを結びつけることになった。私が知っていることは、実際にはそれほど面倒な不適切な方法です。 isSelected性質を有するUIControlから

import UIKit 
import Firebase 
import FirebaseDatabase 

class ViewController: UIViewController { 
    @IBAction func OnOffButton(_ sender: UITapGestureRecognizer){ 
     if button.backgroundColor == UIColor.white { 
     OnOff(state:"ON") 
      OnOffButton.backgroundColor = UIColor.blue 
     } else{ 
      OnOff(state:"OFF") 
      OnOffButton.backgroundColor = UIColor.white 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     OnOff(state: "Off") 
     OnOffButton.backgroundColor = UIColor.white 
    } 

答えて

0

は、ボタンの状態を保存するためにbuttonIsSelected変数を使用するには、ダンカンCの提案の迅速かつ汚い実装です:

import UIKit 

class ViewController: UIViewController { 

    var buttonIsSelected = false 
    @IBOutlet weak var onOffButton: UIButton! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    updateOnOffButton() 
    } 

    override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
    } 

    @IBAction func onOffButtonTapped(_ sender: Any) { 
    buttonIsSelected = !buttonIsSelected 
    updateOnOffButton() 
    } 

    func updateOnOffButton() { 
    if buttonIsSelected { 
     onOffButton.backgroundColor = UIColor.blue 
    } 
    else { 
     onOffButton.backgroundColor = UIColor.white 
    } 
    } 

} 
+0

ありがとうございます!私はいくつか微調整を行い、それを私のデータベースに書きました。私は本当に助けに感謝します! – mtlmatt

1

UIButton継承。これを使用して状態を追跡します。通常、オン状態に対応するにはbutton.isSelected == trueを使用し、falseはオフ状態です。

状態を切り替えるには、button.isSelected = !button.isSelectedを使用できます。あなたの具体的な例

// User pressed the button, so toggle the state: 
button.isSelected = !button.isSelected 

// Now do something with the new state 
if button.isSelected { 
    // button is on, so ... 
} else { 
    // button is off, so... 
} 
+0

返事ありがとうございます! button.isSelectedに「未解決の識別子の使用」ボタンが表示されていることを示唆したときに書きました。ステップに関するアドバイスはありません。ありがとうございました。 – mtlmatt

0

パーのソリューションが動作するはずです。しかし、私は別のアプローチを提案します。

一般に、ビューオブジェクトに状態を格納するのは良い設計ではありません。脆弱で、ビューオブジェクトが表示され、状態情報を収集し、保存しないMVCデザインパターンに従いません。

代わりに、私はあなたのビューコントローラでインスタンス変数、buttonIsSelectedを作成します。ボタンがタップされたときに切り替えて、ボタンの選択したプロパティの状態、ボタンの色を変更し、新しい状態をFireBaseに記録します。

複雑な状態をビューコントローラに格納すると、それをモデルオブジェクトに分ける価値があります。さまざまな状態値を保持する構造体と同じくらい簡単にすることができます。そうすれば、コントローラ(ビューコントローラ)とモデルを明確に分離することができます。ここで

+0

ありがとうございました!あなたの助けとジョーイと私はそれを起動して実行することができました。私は本当に助けに時間を割いていただきありがとうございます! – mtlmatt

関連する問題