Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. //
  2. // SATextField.swift
  3. // Originally created by @valvolinne. Extracted into a separate file and improved by @gbougakov
  4. //
  5.  
  6. import SwiftUI
  7. import UIKit
  8.  
  9. class WrappableTextField: UITextField, UITextFieldDelegate {
  10. var textFieldChangedHandler: ((String)->Void)?
  11. var onCommitHandler: (()->Void)?
  12.  
  13. func textFieldShouldReturn(_ textField: UITextField) -> Bool {
  14. if let nextField = textField.superview?.superview?.viewWithTag(textField.tag + 1) as? UITextField {
  15. nextField.becomeFirstResponder()
  16. } else {
  17. textField.resignFirstResponder()
  18. }
  19. return false
  20. }
  21.  
  22. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  23. if let currentValue = textField.text as NSString? {
  24. let proposedValue = currentValue.replacingCharacters(in: range, with: string)
  25. textFieldChangedHandler?(proposedValue as String)
  26. }
  27. return true
  28. }
  29.  
  30. func textFieldDidEndEditing(_ textField: UITextField) {
  31. onCommitHandler?()
  32. }
  33. }
  34.  
  35. struct SATextField: UIViewRepresentable {
  36. private let tmpView = WrappableTextField()
  37.  
  38. //var exposed to SwiftUI object init
  39. var tag:Int = 0
  40. var placeholder:String?
  41. var changeHandler:((String)->Void)?
  42. var onCommitHandler:(()->Void)?
  43. var keyboardType: UIKeyboardType = UIKeyboardType.default
  44. var borderStyle: UITextField.BorderStyle = UITextField.BorderStyle.roundedRect
  45. var secure: Bool = false
  46.  
  47. func makeUIView(context: UIViewRepresentableContext<SATextField>) -> WrappableTextField {
  48. tmpView.tag = tag
  49. tmpView.delegate = tmpView
  50. tmpView.placeholder = placeholder
  51. tmpView.onCommitHandler = onCommitHandler
  52. tmpView.textFieldChangedHandler = changeHandler
  53. tmpView.keyboardType = keyboardType
  54. tmpView.borderStyle = borderStyle
  55. tmpView.isSecureTextEntry = secure
  56. return tmpView
  57. }
  58.  
  59. func updateUIView(_ uiView: WrappableTextField, context: UIViewRepresentableContext<SATextField>) {
  60. uiView.setContentHuggingPriority(.defaultHigh, for: .vertical)
  61. uiView.setContentHuggingPriority(.defaultLow, for: .horizontal)
  62. }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement