使用swift时,textfield在键盘出现时向上移动
问题描述:
在目标C中,这两行简单代码用于向上滚动文本视图。在SWIFT中是否有像这样简单的代码来向上滚动文本字段?请帮助我。使用swift时,textfield在键盘出现时向上移动
- (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];
}
答
上:
UITextFieldTextDidEndEditingNotification
和 UITextFieldTextDidBeginEditingNotification
调用此方法寿动画文本框
UIView.animateWithDuration(yourTime, delay: 0, options: .CurveEaseOut, animations: {
yourTextField.frame = yourNewFrame
}, completion: { finished in
println("Basket doors opened!")
})
希望这有助于!
+0
嗨..如何调用该方法? @ Arthur – 2015-02-06 07:40:06
+0
要调用的方法的名称是来自UIVIew的“animateWithDuration”其类方法。 – 2017-04-07 03:15:15
答
其更好地利用这一点:你的文本字段的
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
}
答
设置委托并实现以下方法
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()
}
答
你可以写这样的代码 -
let biginSel = #selector(LoginViewController.didBeginEditing(_:))
NSNotificationCenter.defaultCenter().addObserver(self, selector: biginSel, name: UITextFieldTextDidBeginEditingNotification, object: usrNmFld)
你是说你不能把它翻译成Swift,而你想让其他人为你做? – matt 2014-12-04 15:33:12
请澄清你的问题。你不知道如何在swift中编写相同的代码,或者它没有按预期工作? – cmyr 2014-12-04 16:45:48
大家好!是的,在目标c中,当键盘出现时,这两行代码将向上滚动。如何在SWIFT中翻译此代码? – 2014-12-06 06:18:00