【问题标题】:Managing hiding/showing multiple keyboards in Xcode and swift?在 Xcode 和 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时)?

【问题讨论】:

  • 我认为问题在于你处理观察者的方式..

标签: swift xcode


【解决方案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
    }
}

【讨论】:

    猜你喜欢
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多