Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- class ViewController: UIViewController {
- //// Outlets //////////////////////////////////////////////////////////
- @IBOutlet weak var DateTextField: UITextField!
- @IBOutlet weak var ScrollView: UIScrollView!
- @IBOutlet weak var FirstTextView: UITextField!
- @IBOutlet weak var FirstName: UITextField!
- @IBOutlet weak var OtherDetailsField: UITextView!
- /////-------------------------------------------------
- /////-----------------------
- lazy var datePicker: UIDatePicker = {
- let picker = UIDatePicker()
- picker.datePickerMode = .date
- picker.addTarget(self, action: #selector(datePickerChanged(_:)), for: .valueChanged)
- return picker
- }()
- lazy var dateFormatter: DateFormatter = {
- let formatter = DateFormatter()
- formatter.dateStyle = .medium
- formatter.timeStyle = .none
- return formatter
- }()
- // Adjust Scroll for Keyboard ------------------
- @objc func adjustForKeyboard(notification: Notification) {
- guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
- let keyboardScreenEndFrame = keyboardValue.cgRectValue
- let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
- if notification.name == UIResponder.keyboardWillHideNotification {
- ScrollView.contentInset = .zero
- } else {
- ScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height - view.safeAreaInsets.bottom, right: 0)
- }
- ScrollView.scrollIndicatorInsets = ScrollView.contentInset
- // let selectedRange = OtherDetailsField.selectedRange
- // OtherDetailsField.scrollRangeToVisible(selectedRange)
- }
- //// View Did Load ///////////////////////////////////////
- override func viewDidLoad(){
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- // Adjust Scroll for Keyboard ---------------
- let notificationCenter = NotificationCenter.default
- notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)
- notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
- // Date Picker ---------------
- DateTextField.inputView = datePicker}
- @objc func datePickerChanged(_ sender: UIDatePicker){
- DateTextField.text = dateFormatter.string(from: sender.date)
- }
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){view.endEditing(true)
- }
- // Dismiss Keyboard ------------------
- func setupKeyboardDismissRecognizer(){
- let tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(
- target: self, action: #selector(ViewController.dismissKeyboard))
- tapRecognizer.cancelsTouchesInView = false
- self.view.addGestureRecognizer(tapRecognizer)
- }
- @objc func dismissKeyboard()
- {
- view.endEditing(true)
- }
- ///////
- }
- // Add Done Button to keypad toolbar -----------------
- extension UITextField{
- @IBInspectable var doneAccessory: Bool{
- get{
- return self.doneAccessory
- }
- set (hasDone) {
- if hasDone{
- addDoneButtonOnKeyboard()
- }
- }
- }
- func addDoneButtonOnKeyboard()
- {
- let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
- doneToolbar.barStyle = .default
- let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
- let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
- let items = [flexSpace, done]
- doneToolbar.items = items
- doneToolbar.sizeToFit()
- self.inputAccessoryView = doneToolbar
- }
- @objc func doneButtonAction()
- {
- self.resignFirstResponder()
- }
- }
- extension UITextView{
- @IBInspectable var doneAccessory: Bool{
- get{
- return self.doneAccessory
- }
- set (hasDone) {
- if hasDone{
- addDoneButtonOnKeyboard()
- }
- }
- }
- func addDoneButtonOnKeyboard()
- {
- let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
- doneToolbar.barStyle = .default
- let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
- let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
- let items = [flexSpace, done]
- doneToolbar.items = items
- doneToolbar.sizeToFit()
- self.inputAccessoryView = doneToolbar
- }
- @objc func doneButtonAction()
- {
- self.resignFirstResponder()
- }
- }
- import UIKit
- class ViewController2: UIViewController {
- //// Outlets //////////////////////////////////////////////////////////
- @IBOutlet weak var ScrollView: UIScrollView!
- // Adjust Scroll for Keyboard ------------------
- @objc func adjustForKeyboard(notification: Notification) {
- guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
- let keyboardScreenEndFrame = keyboardValue.cgRectValue
- let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
- if notification.name == UIResponder.keyboardWillHideNotification {
- ScrollView.contentInset = .zero
- } else {
- ScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height - view.safeAreaInsets.bottom, right: 0)
- }
- ScrollView.scrollIndicatorInsets = ScrollView.contentInset
- //let selectedRange = yourTextView.selectedRange
- //yourTextView.scrollRangeToVisible(selectedRange)
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- // Adjust Scroll for Keyboard ---------------
- let notificationCenter = NotificationCenter.default
- notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)
- notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
- }
- /*
- // MARK: - Navigation
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- // Get the new view controller using segue.destination.
- // Pass the selected object to the new view controller.
- }
- */
- // Dismiss Keyboard ------------------
- func setupKeyboardDismissRecognizer(){
- let tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(
- target: self, action: #selector(ViewController.dismissKeyboard))
- tapRecognizer.cancelsTouchesInView = false
- self.view.addGestureRecognizer(tapRecognizer)
- }
- func dismissKeyboard()
- {
- view.endEditing(true)
- }
- }
- import UIKit
- class ViewController3: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- }
- /*
- // MARK: - Navigation
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- // Get the new view controller using segue.destination.
- // Pass the selected object to the new view controller.
- }
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement