尝试在swift中单击文本字段以外的任意位置时隐藏键盘

尝试在swift中单击文本字段以外的任意位置时隐藏键盘,swift,mobile,keyboard,hide,Swift,Mobile,Keyboard,Hide,我可以键入密码文本字段,然后单击外部的任何位置并隐藏键盘,但每当我键入电子邮件文本字段并单击文本字段或登录按钮之外的任何位置时,我都会出错 这是我的密码: import UIKit class FirstScreen: UIViewController { @IBOutlet weak var headerLabel: UILabel! @IBOutlet weak var emailLabel: UITextField! @IBOutlet weak

我可以键入密码文本字段,然后单击外部的任何位置并隐藏键盘,但每当我键入电子邮件文本字段并单击文本字段或登录按钮之外的任何位置时,我都会出错

这是我的密码:

 import UIKit

 class FirstScreen: UIViewController {

     @IBOutlet weak var headerLabel: UILabel!


     @IBOutlet weak var emailLabel: UITextField!
     @IBOutlet weak var passwordLabel: UITextField!



     @IBAction func loginButton(_ sender: UIButton)
     {
         self.passwordLabel.resignFirstResponder()
         self.emailLabel.resignFirstResponder()
         /*
         let emailLabel1 = emailLabel.text!
         let passwordLabel1 = passwordLabel.text!
         if((emailLabel1.contains("email")) && (passwordLabel1.contains("password")))
         {


         }
         else
         {
              print("ERROR")
         }*/

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


 }
我已经试着修复了一段时间,所以任何帮助都会很好

编辑:

我尝试实现以下代码,但仍然得到相同的错误:

import UIKit

class FirstScreen: UIViewController {

@IBOutlet weak var headerLabel: UILabel!

@IBOutlet weak var emailLabel: UITextField!

@IBOutlet weak var passwordLabel: UITextField!

func hideKeyboardWhenTappedAround() {

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
    tap.cancelsTouchesInView = false
    view.addGestureRecognizer(tap)

 }

@objc func dismissKeyboard() {
       self.view.endEditing(true)
 }

override func viewDidLoad() {
    super.viewDidLoad()
    hideKeyboardWhenTappedAround()
    dismissKeyboard()
}

@IBAction func loginButton(_ sender: UIButton)
{
    self.emailLabel.resignFirstResponder()
    self.passwordLabel.resignFirstResponder()
    /*
    let emailLabel1 = emailLabel.text!
    let passwordLabel1 = passwordLabel.text!
    if((emailLabel1.contains("email")) && (passwordLabel1.contains("password")))
    {


    }
    else
    {
        print("ERROR")
    }*/

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




 }
导入UIKit
类FirstScreen:UIViewController{
@IBVAR弱磁头标签:UILabel!
@IBOutlet弱var emailLabel:UITextField!
@IBOutlet弱var密码标签:UITextField!
func hideKeyboardWhenTappedAround(){
让我们点击:UITapGestureRecognizer=UITapGestureRecognizer(目标:self,操作:#选择器(self.dismissKeyboard))
tap.cancelsTouchesInView=false
view.AddGestureRecognitor(点击)
}
@objc func键盘(){
self.view.endEditing(true)
}
重写func viewDidLoad(){
super.viewDidLoad()
hideKeyboardWhenTappedAround()
解雇键盘()
}
@iAction func登录按钮(uu发件人:ui按钮)
{
self.emailLabel.resignFirstResponder()辞职
self.passwordLabel.resignFirstResponder()的
/*
让emailLabel1=emailLabel.text!
让passwordLabel1=passwordLabel.text!
if((emailLabel1.contains(“电子邮件”)&&(passwordLabel1.contains(“密码”))
{
}
其他的
{
打印(“错误”)
}*/
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
self.view.endEditing(true)
}
}

您可以尝试以下方法,从
viewdidload

func hideKeyboardWhenTappedAround() {        

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
    tap.cancelsTouchesInView = false
    view.addGestureRecognizer(tap)

 }

@objc func dismissKeyboard() {
       self.view.endEditing(true)
 }

您可以尝试下面的方法,从
viewdidload

func hideKeyboardWhenTappedAround() {        

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
    tap.cancelsTouchesInView = false
    view.addGestureRecognizer(tap)

 }

@objc func dismissKeyboard() {
       self.view.endEditing(true)
 }

该按钮引用的@iAction方法类型已不存在。通常这意味着@iAction方法名称或类型已更改,并且与该方法的情节提要关系未更新

解决方案:

在情节提要中,删除附加到
内部润色的动作
,并再次将其重新连接到方法:

@iAction func登录按钮(uu发件人:ui按钮)


该按钮引用的@iAction方法类型已不存在。通常这意味着@iAction方法名称或类型已更改,并且与该方法的情节提要关系未更新

解决方案:

在情节提要中,删除附加到
内部润色的动作
,并再次将其重新连接到方法:

@iAction func登录按钮(uu发件人:ui按钮)


应用程序是否会在屏幕加载后立即崩溃?从错误消息来看,emailLabel的IBOutlet似乎没有连接到您的故事板。我已将emailLabel连接并重新连接到控制器,就像3次lol一样。仍然收到相同的错误。不,只有当我在键入emailLabel后尝试单击外部时,它才会崩溃。@RichardDesouza您尝试过下面的答案吗?@chirag90我尝试过使用您的代码,但仍然得到相同的错误。请看代码above@chirag90实际上,我刚刚用一个新变量替换了textfield,现在它可以工作了。谢谢你的帮助,伙计。当屏幕加载时,应用程序会崩溃吗?从错误消息来看,emailLabel的IBOutlet似乎没有连接到您的故事板。我已将emailLabel连接并重新连接到控制器,就像3次lol一样。仍然收到相同的错误。不,只有当我在键入emailLabel后尝试单击外部时,它才会崩溃。@RichardDesouza您尝试过下面的答案吗?@chirag90我尝试过使用您的代码,但仍然得到相同的错误。请看代码above@chirag90实际上,我刚刚用一个新变量替换了textfield,现在它可以工作了。谢谢你们的帮助,伙计们