Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.92 KB | None | 0 0
  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. //// Outlets //////////////////////////////////////////////////////////
  6. @IBOutlet weak var DateTextField: UITextField!
  7.  
  8. @IBOutlet weak var ScrollView: UIScrollView!
  9.  
  10. @IBOutlet weak var FirstTextView: UITextField!
  11. @IBOutlet weak var FirstName: UITextField!
  12.  
  13. @IBOutlet weak var OtherDetailsField: UITextView!
  14.  
  15.  
  16. /////-------------------------------------------------
  17.  
  18. /////-----------------------
  19.  
  20. lazy var datePicker: UIDatePicker = {
  21. let picker = UIDatePicker()
  22. picker.datePickerMode = .date
  23. picker.addTarget(self, action: #selector(datePickerChanged(_:)), for: .valueChanged)
  24. return picker
  25. }()
  26. lazy var dateFormatter: DateFormatter = {
  27. let formatter = DateFormatter()
  28. formatter.dateStyle = .medium
  29. formatter.timeStyle = .none
  30. return formatter
  31. }()
  32.  
  33. // Adjust Scroll for Keyboard ------------------
  34. @objc func adjustForKeyboard(notification: Notification) {
  35. guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
  36. let keyboardScreenEndFrame = keyboardValue.cgRectValue
  37. let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
  38. if notification.name == UIResponder.keyboardWillHideNotification {
  39. ScrollView.contentInset = .zero
  40. } else {
  41. ScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height - view.safeAreaInsets.bottom, right: 0)
  42. }
  43. ScrollView.scrollIndicatorInsets = ScrollView.contentInset
  44. // let selectedRange = OtherDetailsField.selectedRange
  45. // OtherDetailsField.scrollRangeToVisible(selectedRange)
  46. }
  47.  
  48.  
  49.  
  50. //// View Did Load ///////////////////////////////////////
  51.  
  52. override func viewDidLoad(){
  53. super.viewDidLoad()
  54. // Do any additional setup after loading the view.
  55.  
  56. // Adjust Scroll for Keyboard ---------------
  57. let notificationCenter = NotificationCenter.default
  58. notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)
  59. notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
  60.  
  61.  
  62. // Date Picker ---------------
  63. DateTextField.inputView = datePicker}
  64. @objc func datePickerChanged(_ sender: UIDatePicker){
  65. DateTextField.text = dateFormatter.string(from: sender.date)
  66. }
  67. override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){view.endEditing(true)
  68. }
  69.  
  70. // Dismiss Keyboard ------------------
  71. func setupKeyboardDismissRecognizer(){
  72. let tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(
  73. target: self, action: #selector(ViewController.dismissKeyboard))
  74. tapRecognizer.cancelsTouchesInView = false
  75. self.view.addGestureRecognizer(tapRecognizer)
  76. }
  77. @objc func dismissKeyboard()
  78. {
  79. view.endEditing(true)
  80. }
  81.  
  82.  
  83. ///////
  84. }
  85. // Add Done Button to keypad toolbar -----------------
  86. extension UITextField{
  87.  
  88. @IBInspectable var doneAccessory: Bool{
  89. get{
  90. return self.doneAccessory
  91. }
  92. set (hasDone) {
  93. if hasDone{
  94. addDoneButtonOnKeyboard()
  95. }
  96. }
  97. }
  98.  
  99. func addDoneButtonOnKeyboard()
  100. {
  101. let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
  102. doneToolbar.barStyle = .default
  103.  
  104. let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
  105. let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
  106.  
  107. let items = [flexSpace, done]
  108. doneToolbar.items = items
  109. doneToolbar.sizeToFit()
  110.  
  111. self.inputAccessoryView = doneToolbar
  112. }
  113.  
  114. @objc func doneButtonAction()
  115. {
  116. self.resignFirstResponder()
  117. }
  118. }
  119. extension UITextView{
  120.  
  121. @IBInspectable var doneAccessory: Bool{
  122. get{
  123. return self.doneAccessory
  124. }
  125. set (hasDone) {
  126. if hasDone{
  127. addDoneButtonOnKeyboard()
  128. }
  129. }
  130. }
  131.  
  132. func addDoneButtonOnKeyboard()
  133. {
  134. let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
  135. doneToolbar.barStyle = .default
  136.  
  137. let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
  138. let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
  139.  
  140. let items = [flexSpace, done]
  141. doneToolbar.items = items
  142. doneToolbar.sizeToFit()
  143.  
  144. self.inputAccessoryView = doneToolbar
  145. }
  146.  
  147. @objc func doneButtonAction()
  148. {
  149. self.resignFirstResponder()
  150. }
  151. }
  152.  
  153. import UIKit
  154.  
  155. class ViewController2: UIViewController {
  156.  
  157. //// Outlets //////////////////////////////////////////////////////////
  158.  
  159. @IBOutlet weak var ScrollView: UIScrollView!
  160.  
  161.  
  162.  
  163. // Adjust Scroll for Keyboard ------------------
  164. @objc func adjustForKeyboard(notification: Notification) {
  165. guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
  166. let keyboardScreenEndFrame = keyboardValue.cgRectValue
  167. let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
  168.  
  169. if notification.name == UIResponder.keyboardWillHideNotification {
  170. ScrollView.contentInset = .zero
  171. } else {
  172. ScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height - view.safeAreaInsets.bottom, right: 0)
  173. }
  174. ScrollView.scrollIndicatorInsets = ScrollView.contentInset
  175. //let selectedRange = yourTextView.selectedRange
  176. //yourTextView.scrollRangeToVisible(selectedRange)
  177. }
  178.  
  179.  
  180. override func viewDidLoad() {
  181. super.viewDidLoad()
  182. // Do any additional setup after loading the view.
  183.  
  184.  
  185. // Adjust Scroll for Keyboard ---------------
  186. let notificationCenter = NotificationCenter.default
  187. notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)
  188. notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
  189. }
  190.  
  191. /*
  192. // MARK: - Navigation
  193.  
  194. // In a storyboard-based application, you will often want to do a little preparation before navigation
  195. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  196. // Get the new view controller using segue.destination.
  197. // Pass the selected object to the new view controller.
  198. }
  199. */
  200. // Dismiss Keyboard ------------------
  201. func setupKeyboardDismissRecognizer(){
  202. let tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(
  203. target: self, action: #selector(ViewController.dismissKeyboard))
  204. tapRecognizer.cancelsTouchesInView = false
  205. self.view.addGestureRecognizer(tapRecognizer)
  206. }
  207. func dismissKeyboard()
  208. {
  209. view.endEditing(true)
  210. }
  211. }
  212.  
  213. import UIKit
  214.  
  215. class ViewController3: UIViewController {
  216.  
  217.  
  218. override func viewDidLoad() {
  219. super.viewDidLoad()
  220.  
  221.  
  222.  
  223. // Do any additional setup after loading the view.
  224. }
  225.  
  226.  
  227. /*
  228. // MARK: - Navigation
  229.  
  230. // In a storyboard-based application, you will often want to do a little preparation before navigation
  231. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  232. // Get the new view controller using segue.destination.
  233. // Pass the selected object to the new view controller.
  234. }
  235. */
  236.  
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement