2017-03-03 39 views
1

我有一個自定義解除按鈕,我也增加了兩個目標。如果文本字段爲空,則一個目標將執行,但如果文本字段不爲空,則另一個目標將執行。但是兩個目標都在同一時間對單個按鈕進行操作。有人可以幫我解釋一下爲什麼。一個按鈕的兩個目標

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

你不只是給你的按鈕分配一個函數,當用戶點擊那個按鈕時,你的主函數執行,它檢查一個布爾條件,如果看到它應該調用的兩個子函數中的哪一個,並且在條件滿足時調用它? – Zhang

+0

您可能需要查看此大小寫的彙總約定等。https://github.com/raywenderlich/swift-style-guide類,結構和枚舉都是大寫,而方法和變量都在camelCase中。 – Adrian

回答

2

您需要致電removeTarget(_:action:for:)瞭解您已安裝在按鈕上的操作。請在標題中查看addTarget(_:action:for:)的評論。

0

當視圖生成時,第一個目標添加。 當您編輯文本時,第二個目標添加。 所以當你編輯文本時,按鈕有兩個目標。 您需要使用編輯後的remove target()