2014-12-04 182 views
-1

在目标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]; 
} 
+2

你是说你不能把它翻译成Swift,而你想让其他人为你做? – matt 2014-12-04 15:33:12

+0

请澄清你的问题。你不知道如何在swift中编写相同的代码,或者它没有按预期工作? – cmyr 2014-12-04 16:45:48

+0

大家好!是的,在目标c中,当键盘出现时,这两行代码将向上滚动。如何在SWIFT中翻译此代码? – 2014-12-06 06:18:00

回答

0

上:

UITextFieldTextDidEndEditingNotificationUITextFieldTextDidBeginEditingNotification

调用此方法寿动画文本框

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

0

其更好地利用这一点:你的文本字段的

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 
     } 
0

设置委托并实现以下方法

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

0

你可以写这样的代码 -

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