我环顾四周,发现this后显示键盘出现时移动视图。它工作的很好,随时随地移动键盘,我点击一个UITextField
。问题是我有三个UITextField
s,并且只有当键盘出现在UITextField
以上时,键盘才会移动。我也查看了苹果documentation,并发现了一些有用的信息,但我仍然没有获得所需的功能。当键盘显示在UITextField上时移动视图
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
var aRect = self.view.frame;
aRect.size.height -= keyboardSize.size.height
if self.view.frame.origin.y == 0{
if aRect.contains(activeField.frame.origin){
self.view.frame.origin.y -= keyboardSize.height
}
}
}
}
func textFieldDidBeginEditing(_ textField: UITextField) {
activeField = textField
}
func textFieldDidEndEditing(_ textField: UITextField) {
activeField = nil
}
func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
}
}
从Apple文档我只是把我在那里创建aRect
,然后检查点与contains
功能交叉的部分。我希望这会让视图仅在键盘与文本框重叠时才移动,否则保持视图不变。由于某些原因,我不完全了解,情况并非如此。在任何文本字段被点击的情况下,键盘将移动视图(即使对于某些它不应该)。我现在玩了一会儿,并尝试调试但未成功。有任何想法吗?
编辑:我做了一些调试,似乎aRect.contains(...)返回true时,所有的文本字段被点击,但实际上它不应该。是否包含正确的使用方法?
请检查我编辑的答案。 –