Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // SATextField.swift
- // Originally created by @valvolinne. Extracted into a separate file and improved by @gbougakov
- //
- import SwiftUI
- import UIKit
- class WrappableTextField: UITextField, UITextFieldDelegate {
- var textFieldChangedHandler: ((String)->Void)?
- var onCommitHandler: (()->Void)?
- func textFieldShouldReturn(_ textField: UITextField) -> Bool {
- if let nextField = textField.superview?.superview?.viewWithTag(textField.tag + 1) as? UITextField {
- nextField.becomeFirstResponder()
- } else {
- textField.resignFirstResponder()
- }
- return false
- }
- func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
- if let currentValue = textField.text as NSString? {
- let proposedValue = currentValue.replacingCharacters(in: range, with: string)
- textFieldChangedHandler?(proposedValue as String)
- }
- return true
- }
- func textFieldDidEndEditing(_ textField: UITextField) {
- onCommitHandler?()
- }
- }
- struct SATextField: UIViewRepresentable {
- private let tmpView = WrappableTextField()
- //var exposed to SwiftUI object init
- var tag:Int = 0
- var placeholder:String?
- var changeHandler:((String)->Void)?
- var onCommitHandler:(()->Void)?
- var keyboardType: UIKeyboardType = UIKeyboardType.default
- var borderStyle: UITextField.BorderStyle = UITextField.BorderStyle.roundedRect
- var secure: Bool = false
- func makeUIView(context: UIViewRepresentableContext<SATextField>) -> WrappableTextField {
- tmpView.tag = tag
- tmpView.delegate = tmpView
- tmpView.placeholder = placeholder
- tmpView.onCommitHandler = onCommitHandler
- tmpView.textFieldChangedHandler = changeHandler
- tmpView.keyboardType = keyboardType
- tmpView.borderStyle = borderStyle
- tmpView.isSecureTextEntry = secure
- return tmpView
- }
- func updateUIView(_ uiView: WrappableTextField, context: UIViewRepresentableContext<SATextField>) {
- uiView.setContentHuggingPriority(.defaultHigh, for: .vertical)
- uiView.setContentHuggingPriority(.defaultLow, for: .horizontal)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement