Swift3 当我想在文本字段中写字时,键盘不会向上移动。我该怎么修?SWIFT 3 IOS8

Swift3 当我想在文本字段中写字时,键盘不会向上移动。我该怎么修?SWIFT 3 IOS8,swift3,keyboard,xcode8,textfield,move,Swift3,Keyboard,Xcode8,Textfield,Move,我是Xcode新手,我正在尝试制作一个应用程序,当我在文本字段中写入时,我想移动键盘,但视图不移动,我不知道如何修复它。为什么以及如何修复它?swift 3 IOS8 谢谢大家! 这是我的密码: import UIKit class LoginController: UIViewController, UITextFieldDelegate { @IBOutlet weak var loginTextField: UITextField! @IBOutlet weak var topInfo

我是Xcode新手,我正在尝试制作一个应用程序,当我在文本字段中写入时,我想移动键盘,但视图不移动,我不知道如何修复它。为什么以及如何修复它?swift 3 IOS8
谢谢大家!

这是我的密码:

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()
    })
}    
}

如果您在Mac上使用模拟器应用程序,默认情况下使用的键盘是Mac键盘,因此不会在屏幕上显示。要显示它,您必须在模拟器中进入
硬件>键盘>切换软件键盘
⌘K
为简单起见。

不,我正在手机上测试!谢谢你的回答!