如果用户双击文本字段,键盘会变黑
Keyboard goes black if user double taps textfield
我有一个注册页面,其中有 3 个文本字段。触摸文本字段时,视图会向上滑动,以便在显示键盘时可以看到这些字段。但是,如果用户不点击一次,而是快速点击文本框两次,键盘就会变黑,视图的定位就会无可挽回地混乱。这是问题的照片,代码在下面,提前致谢]1
override func viewDidLoad() {
super.viewDidLoad()
emailTextField.delegate = self
passwordTextField.delegate = self
verifyPasswordTextField.delegate = self
emailTextField.autocorrectionType = UITextAutocorrectionType.No
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
}
// method to move the view up when keyboard appears
func keyboardWillShow(notification: NSNotification) {
if viewIsLifted == false {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
// hide the logo and name when view slides up
UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
self.likemojiIcon.alpha = 0
self.likemojiLabel.alpha = 0
}, completion: nil)
self.view.frame.origin.y -= keyboardSize.height
viewIsLifted = true
}
}
}
// method to slide view back down when keyboard is resigned
func keyboardWillHide(notification: NSNotification) {
if viewIsLifted == true {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
// make logo and name reappear on slide back down
UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
self.likemojiIcon.alpha = 1
self.likemojiLabel.alpha = 1
}, completion: nil)
self.view.frame.origin.y += keyboardSize.height
viewIsLifted = false
}
}
}
在动画开始之前设置 viewIsLifted = true ,否则双击可能会在变量更改之前注册键盘 activity 两次,从而导致崩溃。另外,通知发布在哪里?
当您收到键盘 将 出现的通知时关闭用户交互 (beginIgnoringInteractionEvents
),并在 endIgnoringInteractionEvents
出现时重新打开 (endIgnoringInteractionEvents
)您会收到键盘 出现的通知。
我有一个注册页面,其中有 3 个文本字段。触摸文本字段时,视图会向上滑动,以便在显示键盘时可以看到这些字段。但是,如果用户不点击一次,而是快速点击文本框两次,键盘就会变黑,视图的定位就会无可挽回地混乱。这是问题的照片,代码在下面,提前致谢
override func viewDidLoad() {
super.viewDidLoad()
emailTextField.delegate = self
passwordTextField.delegate = self
verifyPasswordTextField.delegate = self
emailTextField.autocorrectionType = UITextAutocorrectionType.No
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
}
// method to move the view up when keyboard appears
func keyboardWillShow(notification: NSNotification) {
if viewIsLifted == false {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
// hide the logo and name when view slides up
UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
self.likemojiIcon.alpha = 0
self.likemojiLabel.alpha = 0
}, completion: nil)
self.view.frame.origin.y -= keyboardSize.height
viewIsLifted = true
}
}
}
// method to slide view back down when keyboard is resigned
func keyboardWillHide(notification: NSNotification) {
if viewIsLifted == true {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
// make logo and name reappear on slide back down
UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
self.likemojiIcon.alpha = 1
self.likemojiLabel.alpha = 1
}, completion: nil)
self.view.frame.origin.y += keyboardSize.height
viewIsLifted = false
}
}
}
在动画开始之前设置 viewIsLifted = true ,否则双击可能会在变量更改之前注册键盘 activity 两次,从而导致崩溃。另外,通知发布在哪里?
当您收到键盘 将 出现的通知时关闭用户交互 (beginIgnoringInteractionEvents
),并在 endIgnoringInteractionEvents
出现时重新打开 (endIgnoringInteractionEvents
)您会收到键盘 出现的通知。