import Foundation import KeychainAccess enum APIError : Error { case accessTokenExpired case networkError // Add more error cases as needed } class APIManager { private let keychain = Keychain (service: "com.example.app.refreshToken" ) private let refreshTokenKey = "refreshToken" private var accessToken: String ? func callAPI < T : Codable >( urlString : String , method : String , parameters : [ String : Any ] ? , completion : @escaping ( Result < T , APIError >) -> Void ) { guard let url = URL (string: urlString) else { completion(.failure(.networkError)) return } var request = URLRequest (url: url) request.httpMethod = method // Add access token to the request headers if available if let token = accessToken { request.setValue( "Bearer \(token) " , forHTTPHeaderField: "Aut...
Move up textfield when keyboard appears on UIViewController in Swift
import UIKit
import Foundation
import Alamofire
class ViewController: UIViewController, UIScrollViewDelegate, UITextFieldDelegate {
@IBOutlet weak var scrollViewBottonConstraint: NSLayoutConstraint!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextfield: UITextField!
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.contentSize = view.frame.size
let tabGesture = UITapGestureRecognizer(target: self, action: #selector(didTapView(gesture:)))
view.addGestureRecognizer(tabGesture)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
addObservers()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
removeObservers()
}
@objc func didTapView(gesture: UITapGestureRecognizer){
view.endEditing(true)
}
func addObservers(){
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
notificationCenter.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}
func removeObservers() {
NotificationCenter.default.removeObserver(self)
}
@objc func keyboardWillShow(notification: Notification){
guard let userInfo = notification.userInfo, let frame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {
return
}
let conntentInset = UIEdgeInsets(top: 0, left: 0, bottom: frame.height, right: 0)
scrollView.contentInset = conntentInset
}
@objc func keyboardWillHide(notification: Notification){
scrollView.contentInset = UIEdgeInsets.zero
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
textField.resignFirstResponder()
return true
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Comments
Post a Comment