2016-12-29 13 views
0

私は(one,numOne),(two,numTwo),(three,numThree)という名前の3組のボタンを持っています。すべてのボタンの初めはtintColorblackです。ペアのボタンの色をblueに変更したい場合は、そのペアの1つのボタンをタップし、他のペアをタップするとに戻ります。私はコードに従うことでこれを行うことができますが、以下の方法よりも短い方法がありますか?タップしたボタンのペアの色を変更するにはどうすればいいですか?

@IBOutlet weak var one: UIButton! 
@IBOutlet weak var two: UIButton! 
@IBOutlet weak var three: UIButton! 
@IBOutlet weak var numOne: UIButton! 
@IBOutlet weak var numTwo: UIButton! 
@IBOutlet weak var numThree: UIButton! 

@IBAction func buttonTapped(_ sender: UIButton) { 
     if sender == one || sender == numOne 
     { 
      one.tintColor = UIColor.blue 
      numOne.tintColor = UIColor.blue 
      two.tintColor = UIColor.black 
      numTwo.tintColor = UIColor.black 
      three.tintColor = UIColor.black 
      numThree.tintColor = UIColor.black 

    } 
    else if sender == two || sender == numTwo 
    { 
     two.tintColor = UIColor.blue 
     numTwo.tintColor = UIColor.blue 
     one.tintColor = UIColor.black 
     numOne.tintColor = UIColor.black 
     three.tintColor = UIColor.black 
     numThree.tintColor = UIColor.black 

    } 
    else 
    { 
     three.tintColor = UIColor.blue 
     numThree.tintColor = UIColor.blue 
     two.tintColor = UIColor.black 
     numTwo.tintColor = UIColor.black 
     one.tintColor = UIColor.black 
     numOne.tintColor = UIColor.black 

    } 
    } 
+0

それは最も簡単ですが、私はあなたが最短にしたいと思います。 :D –

+0

はい、私は最短を意味してください。 – leaner122

+0

numOne、numTwo、numThreeとは何ですか? –

答えて

6
var allButtons: [[UIButton]] = [[one, numOne], [two, numTwo], [three, numThree]] 

func tap(_ sender: UIButton) { 
    allButtons.forEach { buttons in 
     if buttons.contains(sender) { 
      buttons.forEach{ $0.tintColor = .blue } 
     } else { 
      buttons.forEach{ $0.tintColor = .black } 
     } 
    } 
} 

短い1 XD

buttons.contains(sender) ? buttons.forEach{ $0.tintColor = .blue } : buttons.forEach{ $0.tintColor = .black } 
+0

.... SALUTE!.... –

+0

確かにこれは最短です:) – leaner122

+0

最短で......! –

1

これが最短の形式になります短いためにあなたのコード

@IBAction func buttonTapped(_ sender: UIButton) { 
    one.tintColor = .black 
    numOne.tintColor = .black 
    two.tintColor = .black 
    numTwo.tintColor = .black 
    three.tintColor = .black 
    numThree.tintColor = .black 

    if sender == one || sender == numOne { 
     one.tintColor = .blue 
     numOne.tintColor = .blue 
    } else if sender == two || sender == numTwo { 
     two.tintColor = .blue 
     numTwo.tintColor = .blue 
    } else { 
     three.tintColor = .blue 
     numThree.tintColor = .blue 
    } 
} 

または使用スイッチ

switch sender { 
case one, numOne: 
    one.tintColor = .blue 
    numOne.tintColor = .blue 
case two, numTwo: 
    two.tintColor = .blue 
    numTwo.tintColor = .blue 
default: 
    three.tintColor = .blue 
    numThree.tintColor = .blue 
} 
+0

switchステートメントは色を黒に戻しません – leaner122

+0

少なくともswitch文でif文を短くすることができました:D – leaner122

1

、最初にあなたのボタンoutletでさらに2つのUIButtonインスタンスを宣言する必要があり、今すぐあなたのButtonアクションでこれら2つのボタンを使用してください。

var firstSelected = UIButton() 
var secondSelected = UIButton() 

@IBAction func buttonTapped(_ sender: UIButton) { 
    self.firstSelected.tintColor = .black 
    self.secondSelected.tintColor = .black 
    if sender == one || sender == numOne { 
      self.firstSelected = one 
      self.secondSelected = numOne 
    } 
    else if sender == two || sender == numTwo { 
      self.firstSelected = two 
      self.secondSelected = numTwo    
    } 
    else { 
      self.firstSelected = three 
      self.secondSelected = numThree    
    } 
    self.firstSelected.tintColor = .blue 
    self.secondSelected.tintColor = .blue 
} 
1

それとも受け入れ答えのためにそれを短くする$ 0使用:

allButtons.forEach { 
    let color: UIColor = $0.contains(sender) ? .blue : .black 
    $0.forEach { $0.tintColor = color } 
} 
+1

は受け入れられた答えで完璧に動作します。 – leaner122

2

タグを使用してのようにそれを行うための複数の方法がありますが、スタックビューを使用したUIButtons、スイッチケースの配列の配列 ここでは、タグとコンセントのコレクションを使用した例。

最初にアウトレットのコンセントコレクションを作成します。

@IBOutlet var btn1: [UIButton]! 
@IBOutlet var btn2: [UIButton]! 
@IBOutlet var btn3: [UIButton]! 

その後、

@IBAction func buttonClicked(_ sender: UIButton) { 

    if sender.tag == 1 { 
     btnClicked(clr1: UIColor.black, clr2: UIColor.blue, clr3: UIColor.blue) 
    } 
    if sender.tag == 2 { 
     btnClicked(clr1: UIColor.blue, clr2: UIColor.black, clr3: UIColor.blue) 
    } 
    if sender.tag == 3 { 
     btnClicked(clr1: UIColor.blue, clr2: UIColor.blue, clr3: UIColor.black) 
    } 

} 

func btnClicked(clr1: UIColor, clr2: UIColor, clr3: UIColor) { 
    for i in 0..<2 { 
     btn1[i].tintColor = clr1 
     btn2[i].tintColor = clr2 
     btn3[i].tintColor = clr3 
    } 
} 
関連する問題