【问题标题】:TouchBegan method not working in swift3TouchesBegan 方法在 swift 3 中不起作用
【发布时间】:2017-10-15 03:37:38
【问题描述】:

我想在点击屏幕上的任意位置时关闭键盘。为此,我使用了touchbegan 方法,但没有调用此方法。

【问题讨论】:

  • 显示您正在尝试的内容..?
  • touchBegan 关于什么?什么观点?
  • 有根据的猜测,因为我没有关于您的代码或视图 hierchy 的信息。其他一些观点可能会“偷走”你的感觉。
  • 显示你的代码!

标签: ios iphone swift keyboard keyboard-events


【解决方案1】:

为我工作。向textfields 显示触摸键盘。隐藏其他所有触摸。

class LoginController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var userLogin: UITextField!
    @IBOutlet weak var userPassword: UITextField!

    override func viewDidLoad() {

      userLogin.delegate = self
      userPassword.delegate = self

      //For scrolling the view if keyboard on
      NotificationCenter.default.addObserver(self, selector: #selector(LoginController.keyboardWillShow),
                                             name: NSNotification.Name.UIKeyboardWillShow, object: nil)
      NotificationCenter.default.addObserver(self, selector: #selector(LoginController.keyboardWillHide),
                                             name: NSNotification.Name.UIKeyboardWillHide, object: nil)

      super.viewDidLoad()
    }

    // OTHER METHODS

    var keyBoardAlreadyShowed = false //using this to not let app to scroll view
    //if we tapped UITextField and then another UITextField

    func keyboardWillShow(notification: NSNotification) {
      if !keyBoardAlreadyShowed {
         view.frame.origin.y -= 50
         keyBoardAlreadyShowed = true
      }
    }

    func keyboardWillHide(notification: NSNotification) {
      view.frame.origin.y += 50
      keyBoardAlreadyShowed = false
    }

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

你需要设置delegatesobservers

【讨论】:

    【解决方案2】:

    如果你的触摸没有被其他视图吃掉,那么我想这会起作用

     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
                if touches.first != nil {
                    view.endEditing(true)
            }
       }
    

    【讨论】:

      【解决方案3】:

      斯威夫特 3 :-

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

      【讨论】:

        【解决方案4】:

        您需要分配UITapGestureRecogniser 来查看和关闭键盘。

        在 viewdidLoad() 中

        let tap = UITapGestureRecognizer.init(target: self, action: #selector(self.dismissKeybord(_:)))
                tap.numberOfTapsRequired = 1
                self.view.addGestureRecognizer(tap)
        

        在dismissKeybord中

        func dismissKeybord(_ sender:UITapGestureRecognizer) {
                self.view.endEditing(true)
        }
        

        【讨论】:

          【解决方案5】:

          这在我最近的情况下有效。应该也适合你。

          1. 创建一个UITapGestureRecognizer
          2. 在下面代码中的endEditingselector方法中,只需调用self.view.endEditing(true)即可。

          (请注意,参数true是动画的值)

          class MyViewController: UIViewController {
          
              override func viewDidLoad() {
          
                  super.viewDidLoad()
          
                  let tapGestureRecognizer = UITapGestureRecognizer(target: self, action:#selector(endEditing))
                  tapper.cancelsTouchesInView = false
                  self.view.addGestureRecognizer(tapGestureRecognizer)
              }
          
              func endEditing() {
                  self.view.endEditing(true)
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2015-12-11
            • 2020-10-30
            • 2017-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-07
            • 2018-01-13
            相关资源
            最近更新 更多