【问题标题】:Adjust View for keyboard appears when switching UITextField (Swift)切换 UITextField (Swift) 时出现为键盘调整视图
【发布时间】:2015-02-28 13:10:09
【问题描述】:

我有两个 UIView,主要的一个和一个会在键盘出现时向上移动(第二个 UIView 有两个文本字段)。我已经设法使用以下代码做到了这一点:

LoginViewController.swift :

override func viewDidLoad() {
    super.viewDidLoad()


    self.originalCenter = self.contentView.center;
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidShow:", name: UIKeyboardDidShowNotification, object: nil)


}

func keyboardDidShow(notification: NSNotification)
{
    UIView.animateWithDuration(1.0, animations: {
    self.contentView.center = CGPointMake(self.originalCenter.x, self.originalCenter.y - 40);
     })

}

我的大问题是,因为 UIView 的移动取决于键盘通知,所以当用户点击一个 TextField 时它会向上移动,但是当他点击第二个时,视图会自动向下移动。我做错了什么?

这是正在发生的事情:Keyboard Error Gif

这个问题已回答 over here ,但我需要 Swift 语言的解决方案。

【问题讨论】:

标签: ios swift uiview keyboard uitextfield


【解决方案1】:

创建一个实例变量并检查键盘是否被激活: 类 ViewController: UIViewController, UITextFieldDelegate {

var _keyboardActivated: Bool = false

override func viewDidLoad() {
    super.viewDidLoad()
    registerForKeyboardNotifications()
}

override func viewWillDisappear(animated: Bool) {
    NSNotificationCenter.defaultCenter().removeObserver(self,
        name: UIKeyboardDidShowNotification,
        object: nil)

    NSNotificationCenter.defaultCenter().removeObserver(self,
        name: UIKeyboardWillHideNotification,
        object: nil)
}

func registerForKeyboardNotifications() {
    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: "keyboardWillShow:",
        name: UIKeyboardWillShowNotification,
        object: nil)

    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: "keyboardWillBeHidden:",
        name: UIKeyboardWillHideNotification,
        object: nil)
}

func keyboardWillShow(notification: NSNotification) {
    if (!_keyboardActivated) {
      // do stuff
    }
    _keyboardActivated = true
}

func keyboardWillBeHidden(notification: NSNotification) {
    _keyboardActivated = false
}
}

【讨论】:

    【解决方案2】:

    设置文本字段的委托并实现以下方法

    func textFieldDidBeginEditing(textField: UITextField) {
            animateViewMoving(true, moveValue: 100)
    }
    func textFieldDidEndEditing(textField: UITextField) {
            animateViewMoving(false, moveValue: 100)
    }
    
    func animateViewMoving (up:Bool, moveValue :CGFloat){
        var movementDuration:NSTimeInterval = 0.3
        var movement:CGFloat = ( up ? -moveValue : moveValue)
        UIView.beginAnimations( "animateView", context: nil)
        UIView.setAnimationBeginsFromCurrentState(true)
        UIView.setAnimationDuration(movementDuration )
        self.view.frame = CGRectOffset(self.view.frame, 0,  movement)
        UIView.commitAnimations()
    }
    

    参考:http://www.jogendra.com/2015/01/uitextfield-move-up-when-keyboard.html

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 2010-12-19
      • 1970-01-01
      • 2013-04-09
      • 2020-08-20
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2017-08-09
      相关资源
      最近更新 更多