neoneye / SwiftyFORM

iOS framework for creating forms
MIT License
1.07k stars 87 forks source link

Custom FormItem with custom textfield #31

Closed Vincent-dejong closed 7 years ago

Vincent-dejong commented 7 years ago

I've set up a custom textfield class, which I would like to implement into a form item, but I can't seem to find where to do this. I've found the CustomFormItem class, however I'm unsure of where to go from here. How do I add the custom textfield to the CustomFormItem?

This is the custom textfield ` class PostCodeTextField: UITextField, UITextFieldDelegate {

private var characterLimit: Int?

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    delegate = self
    autocapitalizationType = .allCharacters
}

@IBInspectable var maxLength: Int {
    get {
        guard let length = characterLimit else {
            return Int.max
        }
        return length
    }
    set {
        characterLimit = newValue
    }
}

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    guard string.characters.count > 0 else {
        return true
    }

    let currentText = textField.text ?? ""

    let prospectiveText = (currentText as NSString).replacingCharacters(in: range, with: string)

    return prospectiveText.characters.count <= maxLength

}    

`

And I've made a custom class inheriting from CustomFormItem

` public class PostalCodeFormItem: CustomFormItem {

} `

Thank in advance!

neoneye commented 7 years ago

Try this Vincent

class MyViewController: FormViewController {
    override func populate(_ builder: FormBuilder) {
        let item = CustomFormItem()
        item.createCell = { _ in
            return try PostCodeTextField()
        }
        builder += item
    }
}
Vincent-dejong commented 7 years ago

Ah okay, I see, so instead of inheriting from CustomFormItem I should just be creating a new instance of it. Thanks :)

Only problem I'm still running into is that item.createCell is expecting a UITableViewCell, and my PostCodeTextField is a UITextField. How would I create a tableviewcell that behaves like the other TextFieldFormItems?

neoneye commented 7 years ago

For more custom things you will have to make changes to the function PopulateTableView.visit(object: TextFieldFormItem) and to the class TextFieldFormItemCell.

Pull requests are welcome 👍

Vincent-dejong commented 7 years ago

Ah okay, well I took the slightly cheaper but immensely easier approach of using a regular expression specification, which means no fancy automatically changing keyboard, but it gets the job done! 😉

If I ever get around to adding a proper custom form item then I'll be sure to make a pull request!