     fileprivate var formView: UIView!
 
     fileprivate var textFields: [UITextField]!
+    fileprivate var oldTextFieldDelegates: [UITextField: UITextFieldDelegate?] = [:]
     
     fileprivate var currentTextField: UITextField?
     fileprivate var keyboardFrame: CGRect?

        super.init(nibName: nil, bundle: nil)

        self.textFields = textFields

        formView = UIView(frame: .zero)
        formConfigure(formView)

        }
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if let delegate = oldTextFieldDelegates[textField], let unwrappedDelegate = delegate {
            if unwrappedDelegate.responds(to: #selector(UITextFieldDelegate.textField(_:shouldChangeCharactersIn:replacementString:))) {
                return unwrappedDelegate.textField!(textField, shouldChangeCharactersIn: range, replacementString: string)
            }
        }

        return true
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        let idx = textFields.index(of: textField)!
        if idx == textFields.count - 1 {
