2017-09-02 4 views
1

このコードでは、自分のボタンの選択状態と選択解除状態があります。ボタンを押すと緑色に変わり、もう一度押すと赤色に変わり、選択解除状態になります。UIButton状態をtableView行ごとに異なるようにするにはどうすればよいですか?

しかし、これはすべてDetailViewController内にあり、tableViewから特定の行を選択した後、ボタンをクリックして緑色を表示して戻って別の行を試してみると、この別の行には緑色のボタンが表示されます。それを押した(私はしていない)。私が選択した行と他の人のための赤のdetailViewのための緑だけを表示する方法があるかどうか疑問に思っていましたか?

let defaults = UserDefaults.standard 

// Outlets 
@IBOutlet weak var goingButton: UIButton! 

// Actions 
@IBAction func goingButtonTapped(_ sender: UIButton) { 

    goingButton.isSelected = !goingButton.isSelected 

    if goingButton.isSelected == true { 
     goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected) 
     defaults.set(true, forKey: "going") 
     defaults.synchronize() 
     defaults.bool(forKey: "going") 
     print("defaults: \(defaults)") 
    } else if goingButton.isSelected == false { 
     goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal) 
     defaults.set(false, forKey: "going") 
     defaults.synchronize() 
     defaults.bool(forKey: "going") 

    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal) 
    if defaults.bool(forKey: "going") 
{ 
    goingButton.isSelected = true 
    goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected) 

} 
} 

答えて

1

これを試してみてください -

override func viewDidLoad() { 
    super.viewDidLoad() 

    goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal) 
    if defaults.bool(forKey: "going") 
    { 
     goingButton.isSelected = true 
     goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected) 

    } 
} 
+0

こんにちは感謝!これは正常に動作します。 DetailViewControllerのボタンを実装していて、tableViewを持っていて行を選択した場合、各セルのdetailViewのボタンが緑色にならないようにするにはどうすればいいですか? –

+0

ボタンにタグを追加し、cellForRowメソッドをチェックインできます –

関連する問題