【发布时间】:2016-09-23 03:25:08
【问题描述】:
我的屏幕中总共有 3 个文本字段,当键盘弹出时,我试图通过使用通知调整 y 坐标来向上移动我的视图,代码如下所示
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
subscribeToKeyboardNotifications()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
unsubscribeFromKeyboardNotifications()
}
func keyboardWillShow(notification: NSNotification) {
view.frame.origin.y -= getKeyboardHeight(notification)
}
func keyboardWillHide(notification: NSNotification) {
view.frame.origin.y += getKeyboardHeight(notification)
}
func getKeyboardHeight(notification: NSNotification) -> CGFloat {
let userInfo = notification.userInfo
let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue // of CGRect
return keyboardSize.CGRectValue().height
}
func subscribeToKeyboardNotifications() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:" , name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:" , name: UIKeyboardWillHideNotification, object: nil)
}
它部分工作正常,当我点击课本时,键盘弹出并向上移动屏幕,当我点击或按回车时,它向下移动。
但是,在一种情况下它会中断。假设我单击文本框并打开键盘,然后单击另一个文本框。再次调用keyboardWillShow 方法,我的屏幕上有黑色补丁。为什么在没有keyboardWillHide方法的情况下再次调用keybaordWillShow方法,在这种情况下(当我点击textbox1后直接点击textbox2时)?
【问题讨论】:
-
我认为问题在于你处理观察者的方式..