当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动

Posted

技术标签:

【中文标题】当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动【英文标题】:Screen not moving up after keyboard appears when user clicks on text field inside UIWebView 【发布时间】:2017-09-08 07:24:37 【问题描述】:

我有一个 iPhone 应用程序 (Swift 3),其中内容从 CMS 动态加载登录。该表单包含用户需要输入和提交的字段,没有什么棘手的。

不幸的是,当用户点击登录字段时,键盘出现并且隐藏了包含表单的 UIWebView。

我该如何解决这个问题?Please Check Screenshot, click the form hiding my UIWebView Contents

【问题讨论】:

【参考方案1】:

试试这个代码,它适用于 Swift 3。在这种情况下,我给出了 4 个文本字段

import UIKit

class ViewController: UIViewController, UITextFieldDelegate 

  @IBOutlet weak var textField4: UITextField!
  @IBOutlet weak var textField3: UITextField!
  @IBOutlet weak var textField2: UITextField!
  @IBOutlet weak var textField1: UITextField!

  override func viewWillDisappear(_ animated: Bool)
  
    view.endEditing(true)
  

  override func viewDidLoad() 
      super.viewDidLoad()

      self.textField1.delegate = self
      self.textField2.delegate = self
      self.textField3.delegate = self
      self.textField4.delegate = self

      self.textField1.tag = 0
      self.textField2.tag = 1
      self.textField3.tag = 2
      self.textField4.tag = 3
     

  func textFieldShouldReturn(_ textField: UITextField) -> Bool 
      textField.resignFirstResponder()
      return true
  

  func textFieldDidBeginEditing(_ textField: UITextField) 
      switch textField.tag 
      case 0:
          moveTextField(textField: textField, moveDistance: -120, up: true)
      case 1:
          moveTextField(textField: textField, moveDistance: -140, up: true)
      case 2:
          moveTextField(textField: textField, moveDistance: -160, up: true)
      case 3:
          moveTextField(textField: textField, moveDistance: -180, up: true)
      default:
          print("Do Nothing...!")
      
  

  func textFieldDidEndEditing(_ textField: UITextField) 
      switch textField.tag 
      case 0:
          moveTextField(textField: textField, moveDistance: -120, up: false)
      case 1:
          moveTextField(textField: textField, moveDistance: -140, up: false)
      case 2:
          moveTextField(textField: textField, moveDistance: -160, up: false)
      case 3:
          moveTextField(textField: textField, moveDistance: -180, up: false)
      default:
          print("Do Nothing...!")
      
  


  func moveTextField(textField: UITextField, moveDistance: Int, up: Bool)
  
      let moveDuration = 0.3
      let movement: CGFloat = CGFloat(up ? moveDistance : -moveDistance)

      UIView.beginAnimations("animateTextField", context: nil)
      UIView.setAnimationBeginsFromCurrentState(true)
      UIView.setAnimationDuration(moveDuration)
      self.view.frame = (self.view.frame).offsetBy(dx: 0, dy: movement)
      UIView.commitAnimations()
   

【讨论】:

抱歉 @Grecory Wilson Pullyattu 你不明白我的问题,我在我的 Webview 中使用 UIWebView 和 UITextField .....那么我该如何实现你的代码??? 您可以在其他任何地方添加您的 textField,并实现此代码。它会起作用的。但此代码仅适用于 4 个文本字段。您也可以通过添加更多案例来添加更多文本字段 我在 UIwebview 中的 UITextField 那么我该如何实现你的代码...为什么你不明白我的招聘... 你能给我看看你的故事板的viewController场景屏幕截图吗【参考方案2】:
override func viewDidLoad() 
        super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)




func keyboardWillShow(notification: NSNotification) 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 

            self.view.frame.origin.y = -keyboardSize.height/2
    


func keyboardWillHide(notification: NSNotification) 

    if let _ = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 

            self.view.frame.origin.y = 0
    

【讨论】:

没有解决办法?我实现了你的代码,但仍然给我同样的问题 你确定等待会告诉你...但是我在哪里显示我的代码?? @AnkitKumawat 你可以在你的问题中添加你的代码......最好添加这样其他人可以看到你尝试了什么。 @Rahuld 没错,

以上是关于当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动的主要内容,如果未能解决你的问题,请参考以下文章

当用户在 UIWebView 中点击时,默认键盘如何出现?

键盘启动时手指可滚动的 UIWebView

swiftui 文本字段和按钮内的按钮

当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?

验证文本字段

当用户单击按钮时,将文本字符串添加到输入字段中(在光标位置)