在 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 中的“活动”列是“否”,如何隐藏单元格

Swift - Xcode 8.3 自动完成未显示

如何使用 Xcode 和 Swift 在我的导航栏中添加标题?

Swift 3 NSNotificationCenter 键盘将显示/隐藏

xcode swift - 无法编辑后退按钮

在“开始开发 iOS 应用程序 (Swift)”教程中,从 Xcode 11.0 开始,Hello World 屏幕出现在画布顶部,将其隐藏