2017-03-03 10 views
1

私はカスタムのボタンを持っていますが、2つのターゲットも追加しました。テキストフィールドが空白の場合、1つのターゲットが動作しますが、テキストフィールドが空でない場合は、他のターゲットが動作します。しかし、両方のターゲットが同時に個々のボタンに作用しています。誰かが私を助けて、なぜ私に説明することができますか?1つのボタンの2つのターゲット

override func viewDidLoad() { 
    super.viewDidLoad() 
    FirstName.delegate = self 
    LastName.delegate = self 
    FirstName.addTarget(self, action:"edited", for:UIControlEvents.allEditingEvents) 
    LastName.addTarget(self, action:"edited", for:UIControlEvents.allEditingEvents) 
    // Do any additional setup after loading the view. 
    if FirstName.text?.isEmpty == true || LastName.text == "" { 
     ProgressButton.setImage(UIImage(named: "Skip"), for: .normal) 
     ProgressButton.contentEdgeInsets = UIEdgeInsetsMake(0,0,0,0) 
     ProgressButton.addTarget(self, action: #selector(Skip(_sender:)), for: UIControlEvents.touchUpInside) 
    } else { 
     ProgressButton.setImage(UIImage(named: "Right2"), for: .normal) 
     ProgressButton.contentEdgeInsets = UIEdgeInsetsMake(20,31,24,0) 
     ProgressButton.addTarget(self, action: #selector(Continue(_sender:)), for: UIControlEvents.touchUpInside) 
    } 
} 

func edited() { 
    if FirstName.text?.isEmpty == true || LastName.text == "" { 
     ProgressButton.setImage(UIImage(named: "Skip"), for: .normal) 
     ProgressButton.contentEdgeInsets = UIEdgeInsetsMake(0,0,0,0) 
     ProgressButton.addTarget(self, action: #selector(Skip(_sender:)), for: UIControlEvents.touchUpInside) 
    } else { 
     ProgressButton.setImage(UIImage(named: "Right2"), for: .normal) 
     ProgressButton.contentEdgeInsets = UIEdgeInsetsMake(20,31,24,0) 
     ProgressButton.addTarget(self, action: #selector(Continue(_sender:)), for: UIControlEvents.touchUpInside) 
    } 
} 

func Continue(_sender: ABProgressButton!) { 
    FirstName.resignFirstResponder() 
    LastName.resignFirstResponder() 
     // Delay the dismissal by 5 seconds 
     let delay = 0.85 * Double(NSEC_PER_SEC) 
     var time = DispatchTime.now() + Double(Int64(delay))/Double(NSEC_PER_SEC) 
     DispatchQueue.main.asyncAfter(deadline: time, execute: { 

      self.performSegue(withIdentifier: "ToViewController#2", sender: nil) 

     }) 

} 

func Skip(_sender: ABProgressButton!) { 
    FirstName.resignFirstResponder() 
    LastName.resignFirstResponder() 
    self.performSegue(withIdentifier: "ToViewController#2", sender: nil) 
} 
+0

この現象が発生するまでに 'edited()'が呼び出されましたか?そして、両方のメソッドが呼び出されたとあなたはどのように判断していますか? –

+0

ボタンに1つの機能を割り当てるだけではなく、ユーザーがそのボタンをタップするとメイン関数が実行され、条件が満たされた場合に2つのサブ関数のどちらを呼び出すべきかを調べるとブール条件がチェックされます? – Zhang

+0

大文字小文字を区別するための規約などを覗いてみてください。https://github.com/raywenderlich/swift-style-guideクラス、構造体、列挙体は大文字に変換され、メソッドや変数はcamelCase内にあります。 – Adrian

答えて

2

ボタンに既にインストールされている操作については、removeTarget(_:action:for:)に電話する必要があります。ヘッダーのコメントをaddTarget(_:action:for:)にチェックしてください。

0

ビューが生成されると、最初のターゲットが追加されます。 テキストを編集すると、2番目のターゲットが追加されます。 テキストを編集したとき、ボタンには2つのターゲットがあります。 編集済み()で削除対象を使用する必要があります

関連する問題