Check on UIAlertController TextField for enabling the button

后端 未结 4 961
北恋
北恋 2020-12-13 09:49

I have an AlertController with a text field and two button: CANCEL and SAVE. This is the code:

@IBAction func addTherapy(sender: AnyObject)
{
    let addAler         


        
4条回答
  •  Happy的楠姐
    2020-12-13 10:17

    I implemented a subclass of UIAlertController for conveniently adding text fields and associated enabling and disabling of buttons. The basic logic is similar to that Sourabh Sharma but everything is encapsulated in this subclass for tidiness. This should be helpful if your project involves a lot of such alert functionalities.

    public class TextEnabledAlertController: UIAlertController {
      private var textFieldActions = [UITextField: ((UITextField)->Void)]()
    
      func addTextField(configurationHandler: ((UITextField) -> Void)? = nil, textChangeAction:((UITextField)->Void)?) {
          super.addTextField(configurationHandler: { (textField) in
            configurationHandler?(textField)
    
            if let textChangeAction = textChangeAction {
                self.textFieldActions[textField] = textChangeAction
                textField.addTarget(self, action: #selector(self.textFieldChanged), for: .editingChanged)
    
            }
        })
    
    }
    
      @objc private func textFieldChanged(sender: UITextField) {
        if let textChangeAction = textFieldActions[sender] {
            textChangeAction(sender)
        }
      }
    }
    

    To use it, just provide a textChangeAction block when adding the text fields:

        alert.addTextField(configurationHandler: { (textField) in
            textField.placeholder = "Your name"
            textField.autocapitalizationType = .words
        }) { (textField) in
            saveAction.isEnabled = (textField.text?.characters.count ?? 0) > 0
        }
    

    For the full example, see the git page.

提交回复
热议问题