2015-10-22 146 views
1

我使用此代码在键盘出现时向上移动视图,在我的登录页面中,此代码工作良好,但在注册页面中不起作用。UITextField在Swift中出现键盘时向上移动

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

我有另一个函数返回键盘上的键,它也工作在登录页面上,但不是在注册页面上。两页之间的所有内容都是相同的。

func textFieldShouldReturn(textField: UITextField) -> Bool { 

    textField.resignFirstResponder() 
    return true 
} 
+0

检查您的删除者是否已连接 –

+0

演示检查此链接:https://github.com/harshilkotecha/UIScrollViewWhenKeyboardAppearInSwift3 –

回答

4

你在你的ViewController类中分配了你的UITextField的委托吗? 如果未将其设置为self。

self.youttextfield.delegate = self 
+0

@Mohammad它解决了你的问题?请提一下,所以我们可以为您提供更多解决方案。 –

+0

感谢您的帮助@Israr,您是对的,但我在登录页面中使用了没有'UITextFieldDelegate'的代码,并且工作得很好, –

+0

对不起,我犯了一个错误您的解决方案是正确的 –

0

演示链接:https://github.com/harshilkotecha/UIScrollViewWhenKeyboardAppearInSwift3

当你有多个TextView的它是如此的困难所以最好的解决方案 - >

第1步:添加UITextFieldDelegate

class ScrollViewController: UIViewController,UITextFieldDelegate { 

第2步:创建新IBOutlet,但不要与任何文本字段连接

// get current text box when user Begin editing 
    @IBOutlet weak var activeTextField: UITextField? 

步骤3:在viewDidLoad中设定通知setNotificationKeyboard

override func viewWillAppear(_ animated: Bool) { 
      // call method for keyboard notification 
      self.setNotificationKeyboard() 
     } 

     // Notification when keyboard show 
     func setNotificationKeyboard() { 
      NotificationCenter.default.addObserver(self, selector: #selector(keyboardWasShown(notification:)), name: .UIKeyboardWillShow, object: nil) 
      NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: .UIKeyboardWillHide, object: nil) 
     } 

步骤6:当用户聚焦文本提交对象传给

// get current text field 
    func textFieldDidBeginEditing(_ textField: UITextField) 
    { 
     activeTextField=textField; 
    } 
    func textFieldDidEndEditing(_ textField: UITextField) 
    { 
     activeTextField=nil; 
    } 

步骤5在activeTextField基准和存储写此二方法:两种方法隐藏和取消隐藏

func keyboardWasShown(notification: NSNotification) 
    { 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height+10, 0.0) 
     self.scrollView.contentInset = contentInsets 
     self.scrollView.scrollIndicatorInsets = contentInsets 
     var aRect : CGRect = self.view.frame 
     aRect.size.height -= keyboardSize!.height 
     if let activeField = self.activeTextField 
     { 
      if (!aRect.contains(activeField.frame.origin)) 
      { 
       self.scrollView.scrollRectToVisible(activeField.frame, animated: true) 
      } 
     } 
    } 
// when keyboard hide reduce height of scroll view 


func keyboardWillBeHidden(notification: NSNotification){ 
     let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0,0.0, 0.0) 
     self.scrollView.contentInset = contentInsets 
     self.scrollView.scrollIndicatorInsets = contentInsets 
     self.view.endEditing(true) 
    } 
相关问题