I want to move the content of the bottom of my UIViewController upwards as the keypad appears. At the bottom of the view controller I have a UITextField and when the user cl
I'm not sure how the top rated answer works; isn't it supposed to be:
func keyboardWillShow(notification: NSNotification) {
if let info: NSDictionary = notification.userInfo {
let value: NSValue = info.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue
let rect: CGRect = value.CGRectValue()
view_comment.y = rect.height - view_comment.h
}
}
Since you need to cast Dictionary to NSDictionary in order to access valueForkey?
There are many ways to achieve this but you always need to listen to keyboard related notifications to do it. They work the same way as the obj-c ones. The following simplified example shows how to move the text field up when the keyboard appears and move it back down when it gets dismissed. The following example is an implementation of UIViewController.
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self);
}
func keyboardWillShow(sender: NSNotification) {
let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as NSValue;
let rect :CGRect = s.CGRectValue();
var frame = self.textField.frame;
frame.origin.y = frame.origin.y - rect.height;
self.textField.frame = frame;
}
func keyboardWillHide(sender: NSNotification) {
let s:NSValue = sender.userInfo.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue;
let rect :CGRect = s.CGRectValue();
var frame = self.textField.frame;
frame.origin.y = frame.origin.y + rect.height;
self.textField.frame = frame;
}