How to move content of UIViewController upwards as Keypad appears using Swift

后端 未结 2 896
谎友^
谎友^ 2021-01-07 09:05

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

相关标签:
2条回答
  • 2021-01-07 09:25

    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?

    0 讨论(0)
  • 2021-01-07 09:36

    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;
    }
    
    0 讨论(0)
提交回复
热议问题