键盘出现时UITextField上移【Swift】

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了键盘出现时UITextField上移【Swift】相关的知识,希望对你有一定的参考价值。

参考技术A

点击UITextField之后,视图上移。

一些textfield在键盘显示出来的时候会被挡住,所以在编辑textfield我们可以把视图上移。

我这里有一个函数可以让屏幕上移,可以传值决定是否有动画以及移动高度。

如果想在 Objective-C 中实现这个效果,可以看这篇文章 UITextField被选中时移动UIView上去

试试吧,工作起来很好,我测试过了。

当键盘出现在swift中时滚动UITextView

【中文标题】当键盘出现在swift中时滚动UITextView【英文标题】:Scroll UITextView when keyboard appears in swift 【发布时间】:2015-03-04 05:55:33 【问题描述】:

我现在面临的问题是UIScrollView中有一个UITextField。 当我单击 UITextField 时,我正在使用 UIToolBar 显示 UIPickerView。当 PickerView 出现时,我需要将 UITextField 向上移动。

这是我的设计

这是我的代码

 func keyboardWillShow(notification: NSNotification)

    let userInfo = notification.userInfo
    if let info = userInfo
    
        let animationDurationObject =
        info[UIKeyboardAnimationDurationUserInfoKey] as NSValue

        let keyboardEndRectObject =
        info[UIKeyboardFrameEndUserInfoKey] as NSValue

        var animationDuration = 0.0
        var keyboardEndRect = CGRectZero

        animationDurationObject.getValue(&animationDuration)
        keyboardEndRectObject.getValue(&keyboardEndRect)

        let window = UIApplication.sharedApplication().keyWindow

        keyboardEndRect = view.convertRect(keyboardEndRect, fromView: window)

        let intersectionOfKeyboardRectAndWindowRect =
        CGRectIntersection(view.frame, keyboardEndRect);

        UIView.animateWithDuration(animationDuration, animations: [weak self] in

            self!.scrollView.contentInset = UIEdgeInsets(top: 0,
                left: 0,
                bottom: intersectionOfKeyboardRectAndWindowRect.size.height,
                right: 0)
            self?.scrollView.scrollRectToVisible(self!.activeTextField.frame, animated: true)
        )
    


func keyboardWillHide(notification: NSNotification)

    let userInfo = notification.userInfo

    if let info = userInfo
        let animationDurationObject =
        info[UIKeyboardAnimationDurationUserInfoKey]
            as NSValue

        var animationDuration = 0.0;

        animationDurationObject.getValue(&animationDuration)

        UIView.animateWithDuration(animationDuration, animations: 
            [weak self] in
            self?.scrollView.contentInset = UIEdgeInsetsZero
            self?.scrollView.scrollIndicatorInsets = UIEdgeInsetsZero
        )
    


func textFieldShouldReturn(textField: UITextField) -> Bool

    textField.resignFirstResponder()
    return true


func textFieldShouldBeginEditing(textField: UITextField) -> Bool

    var returnVal = true
    self.activeTextField = textField
    if textField == self.pickerTextField
    
        returnVal = false
        var yval:CGFloat = self.view.bounds.size.height - 206
        self.pickerContainerView.frame = CGRectMake(0, yval, self.view.bounds.size.width, self.pickerContainerView.frame.size.height)
        self.pickerContainerView.hidden = false
        self.view.addSubview(self.pickerContainerView)
    
    return returnVal


func textFieldDidEndEditing(textField: UITextField) 
    self.activeTextField = nil
    textField.resignFirstResponder()

当我单击其他文本字段时,这些文本字段会在键盘出现时上升。但是 PickerTextField 怎么办

还有关于 UItextView 的任何想法

谢谢。

【问题讨论】:

【参考方案1】:

Swift 3 版本:

func textViewDidBeginEditing(_ textView: UITextView) 
    let scrollPoint : CGPoint = CGPoint.init(x:0, y:textView.frame.origin.y)
    self.scrollView.setContentOffset(scrollPoint, animated: true)


func textViewDidEndEditing(_ textView: UITextView) 
    self.scrollView.setContentOffset(CGPoint.zero, animated: true)

【讨论】:

【参考方案2】:
 You can try like below with textView delegate - 

 // MARK: UITextViewDelegate
    func textViewDidBeginEditing(textView: UITextView) 
        var scrollPoint : CGPoint = CGPointMake(0, self.textView.frame.origin.y)
        self.scrollView.setContentOffset(scrollPoint, animated: true)
    

    func textViewDidEndEditing(textView: UITextView) 
        self.scrollView.setContentOffset(CGPointZero, animated: true)
    

【讨论】:

我试过你的代码。它不适合我的情况。我将 TextView y 值设为 93。因为我在 UIView 中添加了 TextView。你可以在我的设计中看到这一点。 你应该在scrollView中添加你的textView,然后它就会工作。您必须在视图控制器中继承 textViewDelegate 并在情节提要中设置 textView 的委托。

以上是关于键盘出现时UITextField上移【Swift】的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发-cell里面有textField,出现键盘自动上移

iOS 8 出现键盘时 UIView 上移 |问题

UITextField 的键盘不会出现在 Swift 中的第一次点击时

当键盘出现在 Swift 中时 UITextField 向上移动

Swift:UITextField 被键盘隐藏

当键盘出现在swift中时滚动UITextView