Guest User

Untitled

a guest
Jun 8th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.54 KB | None | 0 0
  1. //
  2. // TextContentType.swift
  3. // textfield
  4. //
  5. // Created by Cassius Pacheco on 5/6/18.
  6. // Copyright © 2018 Cassius Pacheco. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. enum TextContentType {
  12.  
  13. case name
  14. case namePrefix
  15. case givenName
  16. case middleName
  17. case familyName
  18. case nameSuffix
  19. case nickname
  20. case jobTitle
  21. case organizationName
  22. case location
  23. case fullStreetAddress
  24. case streetAddressLine1
  25. case streetAddressLine2
  26. case addressCity
  27. case addressState
  28. case addressCityAndState
  29. case sublocality
  30. case countryName
  31. case postalCode
  32. case telephoneNumber
  33. case emailAddress
  34. case URL
  35. case creditCardNumber
  36. case username
  37. case password
  38. case newPassword
  39. case oneTimeCode
  40. case unavailable
  41.  
  42. @available(iOS 10.0, *)
  43. var value: UITextContentType? {
  44.  
  45. switch self {
  46.  
  47. case .name:
  48. return .name
  49.  
  50. case .namePrefix:
  51. return .namePrefix
  52.  
  53. case .givenName:
  54. return .givenName
  55.  
  56. case .middleName:
  57. return .middleName
  58.  
  59. case .familyName:
  60. return .familyName
  61.  
  62. case .nameSuffix:
  63. return .nameSuffix
  64.  
  65. case .nickname:
  66. return .nickname
  67.  
  68. case .jobTitle:
  69. return .jobTitle
  70.  
  71. case .organizationName:
  72. return .organizationName
  73.  
  74. case .location:
  75. return .location
  76.  
  77. case .fullStreetAddress:
  78. return .fullStreetAddress
  79.  
  80. case .streetAddressLine1:
  81. return .streetAddressLine1
  82.  
  83. case .streetAddressLine2:
  84. return .streetAddressLine2
  85.  
  86. case .addressCity:
  87. return .addressCity
  88.  
  89. case .addressState:
  90. return .addressState
  91.  
  92. case .addressCityAndState:
  93. return .addressCityAndState
  94.  
  95. case .sublocality:
  96. return .sublocality
  97.  
  98. case .countryName:
  99. return .countryName
  100.  
  101. case .postalCode:
  102. return .postalCode
  103.  
  104. case .telephoneNumber:
  105. return .telephoneNumber
  106.  
  107. case .emailAddress:
  108. return .emailAddress
  109.  
  110. case .URL:
  111. return .URL
  112.  
  113. case .creditCardNumber:
  114. return .creditCardNumber
  115.  
  116. case .username:
  117.  
  118. guard #available(iOS 11.0, *) else { return nil }
  119.  
  120. return .username
  121.  
  122. case .password:
  123.  
  124. guard #available(iOS 11.0, *) else { return nil }
  125.  
  126. return .password
  127.  
  128. case .newPassword:
  129.  
  130. guard #available(iOS 12.0, *) else { return nil }
  131.  
  132. return .newPassword
  133.  
  134. case .oneTimeCode:
  135.  
  136. guard #available(iOS 12.0, *) else { return nil }
  137.  
  138. return .oneTimeCode
  139.  
  140. case .unavailable:
  141. return nil
  142. }
  143. }
  144.  
  145. @available(iOS 10.0, *)
  146. init(type: UITextContentType) {
  147.  
  148. switch type {
  149.  
  150. case .name:
  151. self = .name
  152.  
  153. case .namePrefix:
  154. self = .namePrefix
  155.  
  156. case .givenName:
  157. self = .givenName
  158.  
  159. case .middleName:
  160. self = .middleName
  161.  
  162. case .familyName:
  163. self = .familyName
  164.  
  165. case .nameSuffix:
  166. self = .nameSuffix
  167.  
  168. case .nickname:
  169. self = .nickname
  170.  
  171. case .jobTitle:
  172. self = .jobTitle
  173.  
  174. case .organizationName:
  175. self = .organizationName
  176.  
  177. case .location:
  178. self = .location
  179.  
  180. case .fullStreetAddress:
  181. self = .fullStreetAddress
  182.  
  183. case .streetAddressLine1:
  184. self = .streetAddressLine1
  185.  
  186. case .streetAddressLine2:
  187. self = .streetAddressLine2
  188.  
  189. case .addressCity:
  190. self = .addressCity
  191.  
  192. case .addressState:
  193. self = .addressState
  194.  
  195. case .addressCityAndState:
  196. self = .addressCityAndState
  197.  
  198. case .sublocality:
  199. self = .sublocality
  200.  
  201. case .countryName:
  202. self = .countryName
  203.  
  204. case .postalCode:
  205. self = .postalCode
  206.  
  207. case .telephoneNumber:
  208. self = .telephoneNumber
  209.  
  210. case .emailAddress:
  211. self = .emailAddress
  212.  
  213. case .URL:
  214. self = .URL
  215.  
  216. case .creditCardNumber:
  217. self = .creditCardNumber
  218.  
  219. default:
  220.  
  221. guard #available(iOS 11.0, *) else {
  222. self = .unavailable
  223. return
  224. }
  225.  
  226. switch type {
  227.  
  228. case .password:
  229. self = .password
  230.  
  231. case .username:
  232. self = .username
  233.  
  234. default:
  235.  
  236. guard #available(iOS 12.0, *) else {
  237. self = .unavailable
  238. return
  239. }
  240.  
  241. switch type {
  242.  
  243. case .newPassword:
  244. self = .newPassword
  245.  
  246. case .oneTimeCode:
  247. self = .oneTimeCode
  248.  
  249. default:
  250. self = .unavailable
  251. }
  252. }
  253. }
  254. }
  255. }
  256.  
  257. extension UITextField {
  258.  
  259. var textContentSafeType: TextContentType {
  260.  
  261. get {
  262.  
  263. guard #available(iOS 10.0, *), let type = self.textContentType else { return .unavailable }
  264.  
  265. return TextContentType(type: self.textContentType)
  266. }
  267. set {
  268.  
  269. guard #available(iOS 10.0, *) else { return }
  270.  
  271. self.textContentType = newValue.value
  272. }
  273. }
  274.  
  275. func set(_ type: TextContentType, fallback: TextContentType) {
  276.  
  277. self.textContentSafeType = type
  278.  
  279. if self.textContentSafeType != type {
  280. self.textContentSafeType = fallback
  281. }
  282. }
  283. }
Add Comment
Please, Sign In to add comment