在 Xcode 和 swift 中管理隐藏/显示多个键盘?
Posted
技术标签:
【中文标题】在 Xcode 和 swift 中管理隐藏/显示多个键盘?【英文标题】:Managing hiding/showing multiple keyboards in Xcode and swift? 【发布时间】: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时)?
【问题讨论】:
我认为问题在于你处理观察者的方式.. 【参考方案1】:我认为您可以像这样控制您的选择器功能。 (我假设您不需要控制前两个文本字段的视图坐标,因为键盘在显示时不会隐藏它们。)
func keyboardWillShow(notification:NSNotification)
if( thirdTextField.isFirstResponder())
view.frame.origin.y = -getKeyboardHeight(notification)
func keyboardWillHide(notification:NSNotification)
if ( thirdTextField.isFirstResponder())
view.frame.origin.y = 0
【讨论】:
以上是关于在 Xcode 和 swift 中管理隐藏/显示多个键盘?的主要内容,如果未能解决你的问题,请参考以下文章