Как перемещать содержимое UIViewController вверх, когда клавиатура появляется с помощью Swift

Я хочу переместить содержимое нижней части моего UIViewController вверх, когда появится клавиатура. В нижней части контроллера представления у меня есть UITextField, и когда пользователь нажимает на него, появляется клавиатура и блокирует i, t, поэтому пользователь не может видеть, что они вводят в UITextField.

У меня UITextField объявлен следующим образом:

@IBOutlet var startTime : UITextField

Мне нужен UIScrollView для этого? или есть способ переместить содержимое страницы вверх, когда появится клавиатура.

Ответ 1

Существует много способов достичь этого, но вам всегда нужно слушать уведомления, связанные с клавиатурой, для этого. Они работают так же, как и obj-c. Следующий упрощенный пример показывает, как перемещать текстовое поле вверх, когда клавиатура появляется, и отбрасывать ее назад, когда она увольняется. Следующий пример - реализация 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;
}

Ответ 2

Я не уверен, как работает лучший рейтинг. это не должно быть:

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

Поскольку вам нужно использовать словарь для NSDictionary для доступа к valueForkey?