2017-12-15 6 views
0

私は選択されたチェックボックスのみの値を取得する方法を理解しようとしています。私はSubmit UIButtonを使ってさらに10個のチェックボックスを持っています。 Submitボタンを押すと、選択したチェックマークのすべての値が保存されます。ボクシングと空手 "を印刷することはありません"ボクシングは、ボクシングが選択されたときにのみ印刷されます。 screenshotSwiftでのチェックボックスの使用

class SignUpSecondViewController: UIViewController, BEMCheckBoxDelegate { 


@IBOutlet weak var wrestling: BEMCheckBox! 
@IBOutlet weak var karate: BEMCheckBox! 
@IBOutlet weak var boxing: BEMCheckBox! 

override func viewWillAppear(_ animated: Bool) { 
    navigationController?.setNavigationBarHidden(false, animated: true) 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 

    boxing.delegate = self 
    karate.delegate = self 
    wrestling.delegate = self 

    // Do any additional setup after loading the view. 
} 

    func didTap(_ checkBox: BEMCheckBox) { 

    if (checkBox.tag == 1 && checkBox.on){ 
     print("BOXING") 
    }else if (checkBox.tag == 1 && checkBox.on) && (checkBox.tag == 2 && checkBox.on){ 
     print("Boxing and karate") 

    } 

} 
+0

役立つことを願っています。すべてのチェックボックスを配列に保持し、 'submit'ボタンが押されるたびにチェックボックスをトラバースすることができます。または、ボタンをオンにするたびにその値を追加し、オフにするとその値が削除される辞書を保持することができます。 –

+1

それはいつもあなたの最初の条件を満たし、2番目の条件を満たさないようです。 –

+1

@LeoDabus最初のものがなくても、2番目は決して真実ではありません。 'checkBox'は複数のタグ値を同時に持つことはできません。 – rmaddy

答えて

0

checkBoxをチェックする度に、checkBoxタグ1と2を同時に比較しています。それは常にあなたに虚偽を与えます。要件によると、型アレイoptionsのグローバル変数を作成し、これらのコード行を使用します。

var options = [String]() 
func didTap(_ checkBox: BEMCheckBox) { 
    switch checkBox { 
    case wrestling: 
     addRemoveOption(forState: checkBox.on, option: "WRESTLING") 
    case karate : 
     addRemoveOption(forState: checkBox.on, option: "KARATE") 
    default: 
     addRemoveOption(forState: checkBox.on, option: "BOXING") 
    } 

} 
func addRemoveOption(forState : Bool , option : String) 
{ 
    switch forState 
    { 
    case true: 
     options += [option] 
    case false: 
     if let index = options.index(of: option) 
     { 
      options.remove(at: index) 
     } 

    } 
} 
@IBAction func actionSubmit(_ sender : Any) 
{ 
    print(options.joined(separator: "&")) 
} 

を私は、これは、これを行うには、いくつかの方法があります

+0

送信ボタンを押すと、これらの選択値はどのように得られますか? – hg56

+0

私は自分の答えを編集しました。それを見てください。 –

0

Boolsの配列を作成します。チェックボックスをオフに設定するだけでなく、すべてをfalseに設定して開始します。

IBActionでは、sender.tag-1をBoolの配列のインデックスとして使用し、ボタンの状態に基づいて選択したboolを設定します。

ユーザーが送信ボタンをタップすると、Boolsの配列を歩き、現在のボタンの状態を問い合わせます。

タグは壊れやすいので、これを行うには理想的ではありません。同じタグ番号を持つビュー階層に他のビューがある場合、結果は未定義になります。

ボタンをUIStackViewに入れて、スタックビューの 'arrangedViews`配列でそれらのボタンを見つけると、インデックスがわかりやすくなります。また、スタックビューでは、非常に簡単で、水平または垂直に

関連する問題