简体   繁体   English

出现键盘时将UITextField上移

[英]Move UITextField up when keyboard appears

I am trying to write a code to ensure UITextField move up when keyboard present. 我正在尝试编写代码以确保当有键盘时UITextField向上移动。 I have written a code based on what I found in stack overflow however it is not working. 我已经根据在堆栈溢出中发现的内容编写了代码,但是它不起作用。 The original code was written in objective-c but I am not familiar with the it and hence decided to to write code in swift. 原始代码是用Objective-C编写的,但是我对它并不熟悉,因此决定快速编写代码。

can anyone tell what I may be doing wring here? 谁能告诉我在这里干什么?

 {

        // moving text box up when tyoing
func registerForKeyboardNotifications()
{
    //Adding notifies on keyboard appearing
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWasShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillBeHidden(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}



@objc func keyboardWasShown(notification: NSNotification)
{
    //Need to calculate keyboard exact size due to Apple suggestions

    self.scrollView.isScrollEnabled = true
    let info : NSDictionary = notification.userInfo! as NSDictionary
    let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size
    let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height, 0.0)

    self.scrollView.contentInset = contentInsets
    self.scrollView.scrollIndicatorInsets = contentInsets

    var aRect : CGRect = self.view.frame
    aRect.size.height -= keyboardSize!.height
    if (yourEmail) != nil
    {
        if (!aRect.contains(yourEmail!.frame.origin))
        {
            self.scrollView.scrollRectToVisible(yourEmail!.frame, animated: true)
        }
    }


}


@objc func keyboardWillBeHidden(notification: NSNotification)
{
    //Once keyboard disappears, restore original positions
    let info : NSDictionary = notification.userInfo! as NSDictionary as NSDictionary
    let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size
    let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, -keyboardSize!.height, 0.0)
    self.scrollView.contentInset = contentInsets
    self.scrollView.scrollIndicatorInsets = contentInsets
    self.view.endEditing(true)
    self.scrollView.isScrollEnabled = false

}

func textFieldDidBeginEditing(_ textField: UITextField)
{
    yourEmail = textField
}

func textFieldDidEndEditing(_ textField: UITextField)
{
    yourEmail = nil
}





 }

Try this code 试试这个代码

func textFieldDidBeginEditing(textField: UITextField!)
{
     self.scrollView.setContentOffset(CGPoint.init(x: 0, y: scrollBy), animated: true)
  // scrollBy - pass the height you want your scrollview to be scrolled when keyboard appears
 }

func textFieldDidEndEditing(textField: UITextField!)
{
    self.scrollView.setContentOffset(CGPoint.init(x: 0, y: 0), animated: true)

    self.view.endEditing(true);
}

below is the code I wrote with the help of suggestions: 以下是我在建议的帮助下编写的代码:

{

func textFieldDidBeginEditing(_ textField: UITextField) {

    if textField.frame.maxY > self.view.frame.height * 0.6
    {
        self.scrollView.setContentOffset(CGPoint.init(x: 0, y: textField.frame.maxY - self.view.frame.height * 0.6 + 2.0), animated: true)

    }
    else{
        return
    }

}

func textFieldDidEndEditing(_ textField: UITextField)
{
    self.scrollView.setContentOffset(CGPoint.init(x: 0, y: 0), animated: true)

    self.view.endEditing(true);
}

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM