在 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 中管理隐藏/显示多个键盘?的主要内容,如果未能解决你的问题,请参考以下文章
如果 Swift 3/Xcode 8 中的“活动”列是“否”,如何隐藏单元格
如何使用 Xcode 和 Swift 在我的导航栏中添加标题?
Swift 3 NSNotificationCenter 键盘将显示/隐藏
在“开始开发 iOS 应用程序 (Swift)”教程中,从 Xcode 11.0 开始,Hello World 屏幕出现在画布顶部,将其隐藏