ios - 当键盘出现时,如何将最后一个文本字段的 View 向上移动?

标签 ios swift view keyboard uitextfield

我的内部有一个 View ,其中有 6 个文本字段,但我想在单击最后一个文本字段时向上移动 View ,这样我可以在最后一个文本字段中输入值。

这是我的代码,但它适用于所有文本字段:-

 func animateViewMoving (up:Bool, moveValue :CGFloat){

    let movementDuration:TimeInterval = 0.3
    let movement:CGFloat = ( up ? -moveValue : moveValue)

    UIView.beginAnimations("animateView", context: nil)
    UIView.setAnimationBeginsFromCurrentState(true)
    UIView.setAnimationDuration(movementDuration)

    self.view.frame = self.view.frame.offsetBy(dx: 0, dy: movement)
    UIView.commitAnimations()
} 

因此,对于特定的文本字段,如何向上移动 View (键盘大小)

谢谢

最佳答案

@IBOutlet var scrollView: UIScrollView!
@IBOutlet var contentView: UIView!
var textFieldActive:UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    //Keyboard notification
    NotificationCenter.default.addObserver(self,selector: #selector(keyboardWasShown),name:NSNotification.Name.UIKeyboardDidShow,
                                                     object: nil)
    NotificationCenter.default.addObserver(self,selector: #selector(keyboardWillHide),name:NSNotification.Name.UIKeyboardWillHide,
                                                     object: nil)
    // Do any additional setup after loading the view.
}



func textFieldDidBeginEditing(_ textField: UITextField){

    textFieldActive = textField
}



// MARK: - Keyboard notification Method
func keyboardWasShown(notification: NSNotification)
{
    let userInfo = notification.userInfo
    let keyboardSize = (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
    let contentInset = UIEdgeInsetsMake(0.0, 0.0, (keyboardSize?.height)!+100,  0.0)
    self.scrollViewGroupMakeTakers.contentInset = contentInset
    self.scrollViewGroupMakeTakers.scrollIndicatorInsets = contentInset

    // Step 3: Scroll the target text field into view.
    var aRect: CGRect = self.contentViewMakeTakers.frame;
    aRect.size.height -= (keyboardSize?.height)!+100
    if (!aRect.contains(textFieldActive!.frame.origin))
    {

        let scrollPoint: CGPoint = CGPoint(x: 0.0, y: textFieldActive!.frame.origin.y - (keyboardSize!.height-150));            
self.scrollViewGroupMakeTakers.setContentOffset(scrollPoint, animated: true)
    }
}
func keyboardWillHide(notification: NSNotification)
{
    let contentInsets : UIEdgeInsets = UIEdgeInsets.zero
    scrollViewGroupMakeTakers.contentInset = contentInsets;
    scrollViewGroupMakeTakers.scrollIndicatorInsets = contentInsets;
}

关于ios - 当键盘出现时,如何将最后一个文本字段的 View 向上移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41120987/

相关文章:

iphone - UIScrollView 委托(delegate)方法冲突

iphone - "__workq_kernreturn"在 iOS 崩溃日志中或当您暂停应用程序执行时表示什么?

ios - iOS 10 中的远程通知

ios - 您必须做什么才能让设置操作对自定义对象起作用?

android - view.getDrawingCache() 只工作一次

ios - 查找两个时间值之间的差异iOS objective-c

ios - boundingRectWithSize 有时会返回大约 1 行高的高度

ios - 在 Swift 中向属性文本添加属性

android - 使用自定义适配器刷新可见的 ListView

android - 自定义 View 日历中的 Google 日历等事件