首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我在UIButton中添加UITapGestureRecognizer,则单击事件无效

如果我在UIButton中添加UITapGestureRecognizer,则单击事件无效
EN

Stack Overflow用户
提问于 2018-01-11 15:53:12
回答 4查看 2.6K关注 0票数 3

在我的登录页面上,如果我专注于UITextEdit输入电子邮件和密码,键盘会出现,登录页面向上滚动。如果我触摸键盘外部,我会添加删除键盘的代码。

代码语言:javascript
运行
复制
extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }
    
    @objc func dismissKeyboard() {
        view.endEditing(true)
        UIView.animate(withDuration: 0.3, animations: {
            self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
        })
    }
}

在我的viewDidLoad()函数中,我像这样添加了它。

代码语言:javascript
运行
复制
override func viewDidLoad() 
{
        super.viewDidLoad()
        //TODO
        self.hideKeyboardWhenTappedAround()
       ...
}

它工作得很好,但是如果我在键盘仍然打开的时候单击登录按钮,辞退键盘()函数可以工作,但是btnClick函数不能工作。

代码语言:javascript
运行
复制
@IBAction func LoginBtnClick(_ sender: Any) 
{
        print("loginBtn")
        //...
}

我该如何解决这个问题?

EN

Stack Overflow用户

发布于 2018-01-11 16:35:52

我使用以下代码对其进行了测试:

代码语言:javascript
运行
复制
import UIKit

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }

    @objc func dismissKeyboard() {
        view.endEditing(true)
        UIView.animate(withDuration: 0.3, animations: {
            self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
        })
    }
}

class ViewController: UIViewController {

    fileprivate let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 400, height: 50))
    fileprivate let button = UIButton(frame: CGRect(x: 20, y: 200, width: 150, height: 50))

    override func loadView() {
        super.loadView()

        view.addSubview(textField)
        textField.backgroundColor = .lightGray
        view.addSubview(button)
        button.setTitle("Press me", for: .normal)
        button.setTitleColor(UIColor.blue, for: .normal)
        button.addTarget(self, action: #selector(a), for: .touchUpInside)

        hideKeyboardWhenTappedAround()
    }

    @objc func a() {
        print(">>>> pressed")
    }
}

调用a中的代码。因此,我假设代码中还有其他东西会导致按钮不工作。也许您忘了将button链接到@IBAction LoginBtnClick(_:) --检查连接是否真的存在。

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48211042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档