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

Swift实现按钮点击改标题并延时恢复原标题的问题求助

解决方案:点击按钮修改标题后恢复原标题

核心思路是先保存按钮的原始标题,再在延迟任务中将标题还原回去,具体修改如下:

  1. 在keyPressed方法开头,先获取并存储按钮的原始标题:
let originalTitle = sender.currentTitle ?? ""

这里用?? ""处理原标题为nil的极端情况,避免后续报错。

  1. 将0.8秒后的延迟任务修改为恢复原标题:
    把原来的sender.setTitle("", for: .normal)替换为sender.setTitle(originalTitle, for: .normal)

修改后的完整代码:

class ViewController: UIViewController {
    
    @IBOutlet weak var currentButtonTitle: UIButton!
    
    var player: AVAudioPlayer!

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

    @IBAction func keyPressed(_ sender: UIButton) {
        // 保存按钮原始标题
        let originalTitle = sender.currentTitle ?? ""
        
        playSound(soundName: originalTitle)
        
        sender.alpha = 0.5
        sender.setTitle("yay", for: .normal)
        
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
            sender.alpha = 1.0
        }
        
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) {
            // 恢复原始标题
            sender.setTitle(originalTitle, for: .normal)
        }
        
    }
    
    func playSound(soundName: String) {
        guard let url = Bundle.main.url(forResource: soundName, withExtension: "wav") else { return }
        do {
            player = try AVAudioPlayer(contentsOf: url)
            player.play()
        } catch {
            print("播放音频失败:\(error.localizedDescription)")
        }
    }
}

额外优化:

  • 把原来的try!换成do-catch,避免音频文件不存在时崩溃
  • 播放音频用提前保存的originalTitle,确保播放的是对应按钮的原始音频(因为修改标题后sender.currentTitle的值会改变,提前保存更可靠)

内容的提问来源于stack exchange,提问作者はるき

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:35:17