2017-02-09 6 views
0

ボタンの選択を3つのボタンに同時に制限することはできますか?私は、ユーザーにちょうど3つの文字特性を選択させたい。今すぐコードを設定すると、ボタンをタップすると画像が強調表示されます。印象を与えることが選択されます。一度に3つのボタンだけを選択したい。私はbuttonTapped関数を呼び出し、3つのボタンだけを選択する可能性をどのように制限できますか?

import UIKit 

class CharacteristicsViewController: UIViewController, UINavigationControllerDelegate { 


@IBOutlet weak var confidenceButton: UIButton! 
@IBOutlet weak var humbleButton: UIButton! 
@IBOutlet weak var creativeButton: UIButton! 
@IBOutlet weak var athleticButton: UIButton! 
@IBOutlet weak var loyalButton: UIButton! 
@IBOutlet weak var intelligenceButton: UIButton! 
@IBOutlet weak var punctualButton: UIButton! 
@IBOutlet weak var kindButton: UIButton! 
@IBOutlet weak var braveButton: UIButton! 


override func viewDidLoad() { 
    super.viewDidLoad() 

    //HIDE/SHOW NAVIGATION BAR 
    self.navigationController?.isNavigationBarHidden = false 

    //1. CONFIDENCE BUTTON SETTINGS 
    confidenceButton.setImage(UIImage(named: "confidentnor"), for: UIControlState.normal) 
    confidenceButton.setImage(UIImage(named: "confidenthigh"), for: UIControlState.selected) 
    confidenceButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //2. HUMBLE BUTTON SETTINGS 
    humbleButton.setImage(UIImage(named: "humblenor"), for: UIControlState.normal) 
    humbleButton.setImage(UIImage(named: "humblehigh"), for: UIControlState.selected) 
    humbleButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //3. CREATIVE BUTTON SETTINGS 
    creativeButton.setImage(UIImage(named: "creativenor"), for: UIControlState.normal) 
    creativeButton.setImage(UIImage(named: "creativehigh"), for: UIControlState.selected) 
    creativeButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //4. ATHLETIC BUTTON SETTINGS 
    athleticButton.setImage(UIImage(named: "athleticnor"), for: UIControlState.normal) 
    athleticButton.setImage(UIImage(named: "athletichigh"), for: UIControlState.selected) 
    athleticButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //5. LOYAL BUTTON SETTINGS 
    loyalButton.setImage(UIImage(named: "loyalnor"), for: UIControlState.normal) 
    loyalButton.setImage(UIImage(named: "loyalhigh"), for: UIControlState.selected) 
    loyalButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //6. INTELLIGENT BUTTON SETTINGS 
    intelligenceButton.setImage(UIImage(named: "intelligentnor"), for: UIControlState.normal) 
    intelligenceButton.setImage(UIImage(named: "intelligenthigh"), for: UIControlState.selected) 
    intelligenceButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //7. PUNCTUAL BUTTON SETTINGS 
    punctualButton.setImage(UIImage(named: "punctualnor"), for: UIControlState.normal) 
    punctualButton.setImage(UIImage(named: "punctualhigh"), for: UIControlState.selected) 
    punctualButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //8. KIND BUTTON SETTINGS 
    kindButton.setImage(UIImage(named: "kindnor"), for: UIControlState.normal) 
    kindButton.setImage(UIImage(named: "kindhigh"), for: UIControlState.selected) 
    kindButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 
    //9. BRAVE BUTTON SETTINGS 
    braveButton.setImage(UIImage(named: "bravenor"), for: UIControlState.normal) 
    braveButton.setImage(UIImage(named: "bravehigh"), for: UIControlState.selected) 
    braveButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) 

} 

//BUTTON HIGHLIGHT FUNCTION 
func buttonTapped(sender:UIButton) { 
    sender.isSelected = !sender.isSelected; } 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 


} 

} 

答えて

1

は、あなたは物事が少し楽になりますボタンを反復処理するには、このビューのサブビューを使用することができます。すべてのボタンをコンセントにする必要はありませんが、そうでない場合は、.normal.selectedの画像をストーリーボードに設定する必要があります。

ボタンのみを含むビューを作成したら、UIButtonのマップされた配列と現在選択されているボタンの数を示すプロパティを返す計算プロパティを作成できます。

// MARK: Outlets 

@IBOutlet weak var traitButtonsView: UIView? 

// MARK: Properties 

var traitsSelected: Int { 
    return traitButtons.filter { $0.isSelected }.count 
} 
var traitButtons: [UIButton] { 
    return traitButtonsView?.subviews.flatMap { $0 as? UIButton } ?? [] 
} 

// MARK: Actions 

func buttonTapped(sender: UIButton) { 
    if traitsSelected < 3 || sender.isSelected { 
     sender.isSelected = !sender.isSelected 
    } 
} 
+1

ありがとうございました。 – Andrew

0

ボタンをタップするたびに増減する何らかの種類のカウンタを保持することができます。あなたがUIView内のあなたのボタンを囲む場合

var counter = 0; 

func buttonTapped(sender:UIButton) { 
    if sender.isSelected { 
     counter += 1 
    } 
    else { 
     counter -= 1 
    } 

    if counter > 3 { 
     return; 
    } 
    sender.isSelected = !sender.isSelected; 
} 
関連する問題