Je suis nouveau sur Xcode et j'essaye de faire une application et j'aimerais bouger le clavier lorsque j'écris dans le champ de texte, mais la vue ne bouge pas et je n'ai aucune idée de comment la réparer. Pourquoi et comment puis-je le réparer? swift 3 IOS8
Merci!Le clavier ne se déplace pas lorsque je veux écrire dans le champ de texte. Comment devrais-je le réparer? sweift 3 IOS8
Voici mon code:
import UIKit
class LoginController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var loginTextField: UITextField!
@IBOutlet weak var topInfoLabel: UILabel!
@IBOutlet weak var uiHolderView: UIView!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var loginButton: UIButton!
@IBOutlet weak var logo: UIImageView!
@IBOutlet weak var forgotPasswordButton: UIButton!
@IBOutlet weak var uiHolderViewCenterConstraint: NSLayoutConstraint!
@IBOutlet weak var loginBox: UIView!
fileprivate var isResettingPassword = false
fileprivate var keyboardIsShown = false
fileprivate var topUIHolderInitialValue : CGFloat?
fileprivate var uiHolderCenterInitialValue : CGFloat?
override func viewDidLoad() {
super.viewDidLoad()
loginTextField.isUserInteractionEnabled = false
loadUI()
DataManager.isCourseViewPresentedOnce = false
}
override func viewWillAppear(_ animated: Bool) {
let _token = DataManager.token?.token
if _token?.isEmpty == false {
print("will use old token")
if TokenManager.hasTokenExpired(){
CommunicationManager.renewToken({json -> Void in
TokenManager.saveRenewedToken(json)
self.navigateToUniversityController()
}, onFailure: {error -> Void in})
}else{
navigateToUniversityController()
}
}else{
print("no token")
}
registerForKeyboardNotifications()
emailTextField.delegate = self
passwordTextField.delegate = self
emailTextField.text = String()
passwordTextField.text = String()
uiHolderCenterInitialValue = uiHolderViewCenterConstraint.constant
}
fileprivate func navigateToUniversityController(){
DispatchQueue.main.async{
self.performSegue(withIdentifier: "segueToUniversityController", sender: self)
}
}
@IBAction func loginButtonClick(_ sender: AnyObject) {
if isResettingPassword == false {
login()
}else{
resetPassword()
}
}
@IBAction func forgotPasswordClicked(_ sender: AnyObject) {
if isResettingPassword == false{
showForgotPasswordAlert()
isResettingPassword = true
forgotPasswordButton.setTitle("Cancel", for: UIControlState())
passwordTextField.isUserInteractionEnabled = false
passwordTextField.isHidden = true
loginButton.setTitle("Send email", for: UIControlState())
emailTextField.returnKeyType = UIReturnKeyType.done
} else {
print("cancel clicked")
resetUIToInitialState()
}
}
func showForgotPasswordAlert(){
let alert = UIAlertController(title: "Forgot password", message: "Please provide your valid email. Reset link will be sent to your email address", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler:nil))
self.present(alert, animated: true, completion: nil)
}
fileprivate func resetUIToInitialState(){
isResettingPassword = false
forgotPasswordButton.setTitle("Forgot password", for: UIControlState())
passwordTextField.isUserInteractionEnabled = true
passwordTextField.layer.backgroundColor = UIColor.clear.cgColor
passwordTextField.isHidden = false
loginButton.setTitle("Login", for: UIControlState())
emailTextField.returnKeyType = UIReturnKeyType.next
topInfoLabel.text = "Login to play"
}
fileprivate func login(){
let email : String = emailTextField.text!
let password : String = passwordTextField.text!
if email != "" && password != "" {
CommunicationManager.login(email, password: password,
onSuccess: {json -> Void in
let token = Token()
token.token = json["token"].stringValue
token.tokenExpirationDate = TokenManager.decodePayloadReturnExpirationTime(json["token"].stringValue)
DataManager.token = token
self.performSegue(withIdentifier: "segueToUniversityController", sender: self)
},onFailure: { error -> Void in
let alert = UIAlertController(title: "TRY AGAIN", message:
"login failed", preferredStyle:UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler:nil))
self.present(alert, animated: true, completion: nil)
})
}else{
let alert = UIAlertController(title: "Try again", message: "email & password are required", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler:nil))
self.present(alert, animated: true, completion: nil)
}
}
fileprivate func resetPassword(){
let email : String = emailTextField.text!
if email != "" {
CommunicationManager.passwordRecovery(email,
onSuccess: {json -> Void in
self.showPasswordRecoverySuccess()
self.resetUIToInitialState()
},onFailure: { error -> Void in
let alert = UIAlertController(title: "Try again", message: "please provide valid email", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler:nil))
self.present(alert, animated: true, completion: nil)
})
}else{
let alert = UIAlertController(title: "Try again", message: "email is required", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler:nil))
self.present(alert, animated: true, completion: nil)
}
}
fileprivate func showPasswordRecoverySuccess(){
let alert = UIAlertController(title: "Password recovery", message: "password recovery link is sent to your email", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler:nil))
self.present(alert, animated: true, completion: nil)
}
func loadUI(){
topInfoLabel.text = "Login to play"
emailTextField.returnKeyType = UIReturnKeyType.next
passwordTextField.returnKeyType = UIReturnKeyType.done
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func registerForKeyboardNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(LoginController.keyboardWillShowNotification(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(LoginController.keyboardWillHideNotification(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//self.view.endEditing(true)
if textField == emailTextField{
if isResettingPassword == false{
passwordTextField.becomeFirstResponder()
}else{
self.view.endEditing(true)
}
}
if textField == passwordTextField{
self.view.endEditing(true)
}
return true
}
//MARK Private functions
func keyboardWillShowNotification(_ notification: Notification) {
print("keyboardWillShow")
if let userInfo = notification.userInfo {
if let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as? AnyObject)?.cgRectValue.size.height {
if keyboardIsShown == false {
uiHolderViewCenterConstraint.constant = uiHolderCenterInitialValue! - keyboardHeight
keyboardIsShown = true
}
UIView.animate(withDuration: 0.25, animations: {() -> Void in
self.view.layoutIfNeeded()
})
}
}
}
func keyboardWillHideNotification(_ notification: Notification) {
uiHolderViewCenterConstraint.constant = uiHolderCenterInitialValue!
keyboardIsShown = false
UIView.animate(withDuration: 0.25, animations: {() -> Void in
self.view.layoutIfNeeded()
})
}
}
Non, je suis en train de tester sur mon mobile! Merci pour la réponse! – nasamo