【问题标题】:using swift, textfield move up when keyboard appears使用 swift,文本字段在键盘出现时向上移动
【发布时间】:2016-07-21 14:28:49
【问题描述】:

在 Objective C 中,这两行简单的代码用于向上滚动文本视图。 SWIFT 中是否有任何简单的代码可以向上滚动文本字段?请帮助我。

- (void)textFieldDidBeginEditing:(UITextField *)textField {
CGPoint scrollPoint = CGPointMake(0, textField.frame.origin.y);
[scrollView setContentOffset:scrollPoint animated:YES];
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
[scrollView setContentOffset:CGPointZero animated:YES];
}

【问题讨论】:

  • 你是说你不能把它翻译成 Swift 并且你想让别人为你做它吗?
  • 请澄清您的问题。您不知道如何在 swift 中编写相同的代码,或者它没有按预期工作?
  • 大家好!是的,在目标 c 中,当键盘出现时,这两行代码将向上滚动。如何在 SWIFT 中翻译此代码?

标签: ios swift xcode6


【解决方案1】:

开:

UITextFieldTextDidEndEditingNotificationUITextFieldTextDidBeginEditingNotification

调用此方法为文本字段设置动画

UIView.animateWithDuration(yourTime, delay: 0, options: .CurveEaseOut, animations: {
yourTextField.frame = yourNewFrame
}, completion: { finished in
println("Basket doors opened!")
})

希望这会有所帮助!

【讨论】:

  • 嗨..如何调用该方法? @亚瑟
  • 要调用的方法的名称是“animateWithDuration”,它是 UIVIew 中的一个类方法。
【解决方案2】:

最好用这个:

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        scrollView.scrollEnabled = true
    yourTextfield.addTarget(self, action: "textFieldShouldReturn:", forControlEvents: .EditingDidEndOnExit)
    yourTextfield2.addTarget(self, action: "textFieldShouldReturn:", forControlEvents: .EditingDidEndOnExit)
    ...


    yourTextfield.tag = 1
    yourTextfield2.tag = 2
    ...
}   

    func textFieldShouldReturn(textField: UITextField!) -> Bool {
            let nextTag = textField.tag + 1
            let nextResponder:UIResponder? = textField.superview?.viewWithTag(nextTag)
            if ((nextResponder) != nil) {
                nextResponder?.becomeFirstResponder()
                var scrollPoint: CGPoint = CGPointMake(0, textField.frame.origin.y - 50)
                scrollView.setContentOffset(scrollPoint, animated: true)
            } else {
                textField.resignFirstResponder()
                scrollView.setContentOffset(CGPointZero, animated: true)
            }
            return false
        }

【讨论】:

    【解决方案3】:

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

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

    参考:https://stackoverflow.com/a/32755167/988169

    【讨论】:

      【解决方案4】:

      你可以这样写代码-

      let biginSel = #selector(LoginViewController.didBeginEditing(_:))
          NSNotificationCenter.defaultCenter().addObserver(self, selector: biginSel, name: UITextFieldTextDidBeginEditingNotification, object: usrNmFld)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多