【问题标题】:How to solve keyboard problems in Swift 3?如何解决 Swift 3 中的键盘问题?
【发布时间】:2017-04-11 21:12:54
【问题描述】:

问题是,当我尝试在文本字段中书写时,键盘会将它们遮住。如何向上滚动文本字段以查看我在写什么。我有以下代码行来启用返回键并在您触摸其他位置时隐藏键盘:

override func didReceiveMemoryWarning() {
  super.didReceiveMemoryWarning()
  // Dispose of any resources that can be recreated.

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return false
}

【问题讨论】:

    标签: ios xcode swift3 keyboard


    【解决方案1】:

    如何向上滚动文本字段以查看我在写什么

    这可以通过两种方式实现:

    1. 您可以像@Taichi Kato 一样在键盘隐藏和显示上以编程方式管理您的框架
    2. 您可以集成用于相同目的的库。一个这样的库是 IQKeyBoardManager 其 Swift 变体为 IQKeyboardManagerSwift 您可以在 GitHubcocoapods 上找到它

    要实现以下步骤:

    SWIFT 3

    1. 只需从 Github 或 cocoapods 安装 IQKeyboardManagerSwift

    2. Appdelegate中导入IQKeyboardManagerSwift

    3. AppDelegate didFinishLaunchingWithOptions 方法中添加以下代码行。

      IQKeyboardManager.sharedManager().shouldResignOnTouchOutside = true;
      

    Objective-C

    1. 通过任何媒介安装IQKeyBoardManager
    2. Appdelegate 中导入#import "IQKeyboardManager.h"
    3. AppDelegate didFinishLaunchingWithOptions 方法中添加以下代码行。

      IQKeyboardManager.sharedManager.shouldResignOnTouchOutside = true;
      

    完成。这是您唯一需要编写的代码。

    【讨论】:

      【解决方案2】:

      解决这个问题最简单的办法就是把所有元素放到一个scrollview中,然后把键盘高度加到view底部的常量到superview中。

      当键盘显示或隐藏时,iOS 会向所有注册的观察者发送以下通知:

      UIKeyboardWillShowNotification UIKeyboardDidShowNotification UIKeyboardWillHideNotification UIKeyboardDidHideNotification

      所以你可以这样做:

      1. 获取键盘的大小。
      2. 调整底部内容插入 按键盘高度滚动视图。
      3. 滚动目标文本 视野。

      类似这样的:

       func keyboardWillShow(notification: NSNotification) {
              print("KEYBOARD WILL SHOW")
              let userInfo:NSDictionary = notification.userInfo! as NSDictionary
              let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue
              let keyboardRectangle = keyboardFrame.cgRectValue
              let keyboardHeight = keyboardRectangle.height
              bottomConstraint.constant = keyboardHeight + 8
              UIView.animate(withDuration: 0.5, animations: { [weak self] in
                  self?.view.layoutIfNeeded() ?? ()
              })
      
              UIView.animate(withDuration: 0.3) {
                  self.view.layoutIfNeeded()
              }
          }
          func dismissKeyboard() {
              //Causes the view (or one of its embedded text fields) to resign the first responder status.
              view.endEditing(true)
              bottomConstraint.constant = 8
              UIView.animate(withDuration: 0.5, animations: { [weak self] in
                  self?.view.layoutIfNeeded() ?? ()
              })
          }
      

      【讨论】:

      • bottomConstraint 来自哪里?我收到 unresolved identifier 错误。
      【解决方案3】:

      您可以使用这两个framework 解决keyboard 问题:

      • IQKeyboardManager:Link

      • iOSUtilitiesSource:Link

      【讨论】:

        猜你喜欢
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 2014-03-13
        • 2010-09-30
        • 1970-01-01
        • 2016-10-18
        相关资源
        最近更新 更多