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

使用sender.title(for: .selected)获取按钮标题返回nil报错问题

问题描述
  • 学习iOS开发时按照教程编写按钮响应演示代码,核心实现如下:
import UIKit

class ViewController: UIViewController {

    @IBAction func buttonPressed(_ sender: UIButton) {
        let title = sender.title(for: .selected)!
        let text = "\(title) buttion pressed"
        out.text = text
    }
    
    @IBOutlet weak var out: UILabel!
}
  • 运行环境:Xcode 13.4
  • 已确认的配置:
    • 已通过拖拽操作正确将按钮与buttonPressed响应方法关联
    • 已在Storyboard中双击按钮,设置按钮默认标题为left
    • 移除代码中的强制解包符!后,标签控件可正常显示nil button pressed,IBOutlet连接正常
  • 异常表现:模拟器中点击按钮后触发报错Unexpectedly found nil while unwrapping an Optional value,报错定位在let title = sender.title(for: .selected)!行,无法正确获取到按钮标题。
问题原因

你在Storyboard中双击按钮输入设置的标题,属于按钮**normal(默认正常)状态**下的配置,但代码中调用sender.title(for: .selected)获取的是按钮selected(选中)状态下的标题。你从未给按钮的选中状态单独设置过标题,该方法自然返回nil,对nil做强制解包就会触发崩溃。

解决方法

直接将获取标题时传入的状态参数从.selected改为.normal即可,修改后的响应方法代码如下:

@IBAction func buttonPressed(_ sender: UIButton) {
    let title = sender.title(for: .normal)!
    let text = "\(title) button pressed"
    out.text = text
}

补充:如果你确实需要获取选中状态下的按钮标题,需要先为该状态单独配置标题:可以在Storyboard右侧属性检查器中找到State Config选项,切换到Selected后输入对应标题;也可以通过代码sender.setTitle("对应标题", for: .selected)提前设置,否则无法获取到该状态的标题值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:21:40