Swift实现按钮点击改标题并延时恢复原标题的问题求助
解决方案:点击按钮修改标题后恢复原标题
核心思路是先保存按钮的原始标题,再在延迟任务中将标题还原回去,具体修改如下:
- 在
keyPressed方法开头,先获取并存储按钮的原始标题:
let originalTitle = sender.currentTitle ?? ""
这里用?? ""处理原标题为nil的极端情况,避免后续报错。
- 将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,提问作者はるき
相关产品推荐
相关产品推荐

