我会添加两个目标 UIButton 两个事件:
UIButton
touchDown
touchUpInside
override func viewDidLoad() { super.viewDidLoad() passwordEyeButton.addTarget(self, action: #selector(pressBegan(_:)), for: .touchDown) passwordEyeButton.addTarget(self, action: #selector(pressEnded(_:)), for: .touchUpInside) } @objc func pressBegan(_ sender: UIButton) { passwordEyeButton.setImage(eyeImage, for: .normal) passwordTextField.isSecureTextEntry = false } @objc func pressEnded(_ sender: UIButton) { passwordEyeButton.setImage(crossedEyeImage, for: .normal) passwordTextField.isSecureTextEntry = true }
您需要管理3个事件: .touchDown , .touchUpInside 和 .touchUpOutside 。
.touchDown
.touchUpInside
.touchUpOutside
您的目的是在按下按钮时显示密码,并在释放手指时隐藏密码,因此如果您只是实施 .touchUpInside 检测用户是否停止按下按钮 的 不 强> 如果它在按钮外释放手指,则工作。
override func viewDidLoad() { super.viewDidLoad() button.addTarget(self, action: #selector(showPassword), for: .touchDown) button.addTarget(self, action: #selector(hidePassword), for: .touchUpInside) button.addTarget(self, action: #selector(hidePassword), for: .touchUpOutside) } @objc func showPassword(_ sender: Any) { print("show password") } @objc func hidePassword(_ sender: Any) { print("hide password") }
为按钮添加一个触地事件和一个内部触摸事件:
您可以使用故事板添加它们,因此无需手动添加目标。
//Touch down @IBAction func touched(_ sender: UIButton) { print("show password") } //Touch up inside @IBAction func touchUp(_ sender: UIButton) { print("hide password") }