0

I tryed to use something to move up the view because when I go at the end of my form and I tap on the last textfield I can't see what I write in because the keyboard appears over the text field, so I found something but here if I tap on a textfield on the top of the view this one gonna gonna be hide by going upper, that's the code:

override func viewDidLoad() {

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)

}


func keyboardWillShow(notification: NSNotification) {

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
        self.view.frame.origin.y -= keyboardSize.height
    }

}

func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
        self.view.frame.origin.y += keyboardSize.height
    }
}

But here there is an another problem, when I tap two times one an another textfield, a black bloc appears.

So what I wan't to do is detect the textfield and put the keyboard under it so move up the textfield. And detect if the keyboard is already here do don't show a black bloc. But I haven't found solution about.

Ben
  • 761
  • 1
  • 12
  • 35

3 Answers3

2

I have used this code in my project :

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)

    // Register Keyboard Notification
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)

    // Remove Keyboard notification observer
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

func keyboardWillShow(notification: NSNotification)
{
    var userInfo = notification.userInfo!
    var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
    keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)

    var contentInset:UIEdgeInsets = self.scrollView.contentInset
    contentInset.bottom = keyboardFrame.size.height - 30 //Set this value (30) according to your code as i have navigation tool bar for next and prev.
    self.scrollView.contentInset = contentInset
}

func keyboardWillHide(notification: NSNotification) {
    let contentInset:UIEdgeInsets = UIEdgeInsetsZero
    self.scrollView.contentInset = contentInset
}

Hope It will help you!!

Pushpa Y
  • 1,010
  • 1
  • 12
  • 20
1

Add a bool property self.isKeyBoardUp

In keyboardWillShow: If isKeyBoardUp return, else set it to true and do your stuff.

In keyboardWillHide: If not isKeyBoardUp return, else set it to false and do your stuff.

Arik Segal
  • 2,963
  • 2
  • 17
  • 29
1

Please check this code i am try it and works for get this one from

Move textfield when keyboard appears swift

 func keyboardWasShown(notification: NSNotification) {
   var info = notification.userInfo!
   var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() 

   UIView.animateWithDuration(0.1, animations: { () -> Void in
    self.bottomConstraint.constant = keyboardFrame.size.height + 20
   })
 }
Community
  • 1
  • 1
Birendra
  • 623
  • 1
  • 5
  • 17