Guest User

Untitled

a guest
Jun 8th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.74 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 unavailable
  39.  
  40. @available(iOS 10.0, *)
  41. var value: UITextContentType? {
  42.  
  43. switch self {
  44.  
  45. case .name:
  46. return .name
  47.  
  48. case .namePrefix:
  49. return .namePrefix
  50.  
  51. case .givenName:
  52. return .givenName
  53.  
  54. case .middleName:
  55. return .middleName
  56.  
  57. case .familyName:
  58. return .familyName
  59.  
  60. case .nameSuffix:
  61. return .nameSuffix
  62.  
  63. case .nickname:
  64. return .nickname
  65.  
  66. case .jobTitle:
  67. return .jobTitle
  68.  
  69. case .organizationName:
  70. return .organizationName
  71.  
  72. case .location:
  73. return .location
  74.  
  75. case .fullStreetAddress:
  76. return .fullStreetAddress
  77.  
  78. case .streetAddressLine1:
  79. return .streetAddressLine1
  80.  
  81. case .streetAddressLine2:
  82. return .streetAddressLine2
  83.  
  84. case .addressCity:
  85. return .addressCity
  86.  
  87. case .addressState:
  88. return .addressState
  89.  
  90. case .addressCityAndState:
  91. return .addressCityAndState
  92.  
  93. case .sublocality:
  94. return .sublocality
  95.  
  96. case .countryName:
  97. return .countryName
  98.  
  99. case .postalCode:
  100. return .postalCode
  101.  
  102. case .telephoneNumber:
  103. return .telephoneNumber
  104.  
  105. case .emailAddress:
  106. return .emailAddress
  107.  
  108. case .URL:
  109. return .URL
  110.  
  111. case .creditCardNumber:
  112. return .creditCardNumber
  113.  
  114. case .username:
  115.  
  116. guard #available(iOS 11.0, *) else { return nil }
  117.  
  118. return .username
  119.  
  120. case .password:
  121.  
  122. guard #available(iOS 11.0, *) else { return nil }
  123.  
  124. return .password
  125.  
  126. case .unavailable:
  127. return nil
  128. }
  129. }
  130.  
  131. @available(iOS 10.0, *)
  132. init(type: UITextContentType) {
  133.  
  134. switch type {
  135.  
  136. case .name:
  137. self = .name
  138.  
  139. case .namePrefix:
  140. self = .namePrefix
  141.  
  142. case .givenName:
  143. self = .givenName
  144.  
  145. case .middleName:
  146. self = .middleName
  147.  
  148. case .familyName:
  149. self = .familyName
  150.  
  151. case .nameSuffix:
  152. self = .nameSuffix
  153.  
  154. case .nickname:
  155. self = .nickname
  156.  
  157. case .jobTitle:
  158. self = .jobTitle
  159.  
  160. case .organizationName:
  161. self = .organizationName
  162.  
  163. case .location:
  164. self = .location
  165.  
  166. case .fullStreetAddress:
  167. self = .fullStreetAddress
  168.  
  169. case .streetAddressLine1:
  170. self = .streetAddressLine1
  171.  
  172. case .streetAddressLine2:
  173. self = .streetAddressLine2
  174.  
  175. case .addressCity:
  176. self = .addressCity
  177.  
  178. case .addressState:
  179. self = .addressState
  180.  
  181. case .addressCityAndState:
  182. self = .addressCityAndState
  183.  
  184. case .sublocality:
  185. self = .sublocality
  186.  
  187. case .countryName:
  188. self = .countryName
  189.  
  190. case .postalCode:
  191. self = .postalCode
  192.  
  193. case .telephoneNumber:
  194. self = .telephoneNumber
  195.  
  196. case .emailAddress:
  197. self = .emailAddress
  198.  
  199. case .URL:
  200. self = .URL
  201.  
  202. case .creditCardNumber:
  203. self = .creditCardNumber
  204.  
  205. default:
  206.  
  207. guard #available(iOS 11.0, *) else {
  208. self = .unavailable
  209. return
  210. }
  211.  
  212. switch type {
  213.  
  214. case .password:
  215. self = .password
  216.  
  217. case .username:
  218. self = .username
  219.  
  220. default:
  221.  
  222. self = .unavailable
  223. }
  224. }
  225. }
  226. }
  227.  
  228. extension UITextField {
  229.  
  230. var textContentSafeType: TextContentType {
  231.  
  232. get {
  233.  
  234. guard #available(iOS 10.0, *), let type = self.textContentType else { return .unavailable }
  235.  
  236. return TextContentType(type: type)
  237. }
  238. set {
  239.  
  240. guard #available(iOS 10.0, *) else { return }
  241.  
  242. self.textContentType = newValue.value
  243. }
  244. }
  245.  
  246. func set(_ type: TextContentType, fallback: TextContentType) {
  247.  
  248. self.textContentSafeType = type
  249.  
  250. if self.textContentSafeType != type {
  251. self.textContentSafeType = fallback
  252. }
  253. }
  254. }
Add Comment
Please, Sign In to add comment