You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用三元运算符设置UIButton图片点击无切换效果如何解决?

问题根因分析
    1. 未修改按钮的isSelected状态:现有代码仅判断isSelected的当前值,点击事件中没有翻转该属性,按钮状态永远停留在初始值,导致逻辑分支永远固定
    1. 图片设置逻辑错误:当前逻辑是给按钮的不同状态(normal/selected)分别设置图片,但没有切换按钮的实际展示状态,界面永远只会展示normal状态对应的图片
    1. 缺失密码输入框属性同步逻辑:现有代码没有修改UITextField的isSecureTextEntry属性,仅处理按钮图片,无法实现密码显隐的核心需求
修复方案

推荐更简洁的实现:提前给按钮不同状态绑定对应图片,点击时仅需翻转状态即可自动切换图片,同时同步输入框属性:

1. 修改按钮初始化逻辑

private lazy var button: UIButton = {
    let view = UIButton()
    view.translatesAutoresizingMaskIntoConstraints = false
    // 提前绑定不同状态对应的图片
    view.setImage(secureImage, for: .selected) // 选中状态:密码可见,展示睁眼图
    view.setImage(unSecureImage, for: .normal) // 未选中状态:密码隐藏,展示闭眼图
    view.addTarget(self, action: #selector(toggle), for: .touchUpInside)
    return view
}()

2. 重写toggle点击方法

@objc func toggle(_ sender: UIButton) {
    // 翻转按钮选中状态,自动切换对应图片
    sender.isSelected = !sender.isSelected
    // 同步密码输入框的显隐属性,yourTextField替换为你实际的输入框变量名
    yourTextField.isSecureTextEntry = !sender.isSelected
}

3. 初始调用逻辑保持不变

self.toggle(button)
额外注意事项
  • 提前确认secureImage、unSecureImage已经正确初始化,不存在为nil的情况
  • 如果cell存在复用场景,需要在prepareForReuse方法中同步重置按钮选中状态和输入框的isSecureTextEntry属性,避免复用出现展示异常

内容的提问来源于stack exchange,提问作者David Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:24:06