Swift新手求助:修改按钮标题时遇currentTitle只读属性错误的解决方法
嗨,作为Swift新手碰到这个问题太正常啦,我当初刚学的时候也踩过这个坑!咱们先搞明白为啥你之前的方法不行,再给你正确的解决办法~
为什么currentTitle赋值会报错?
你看到的错误提示"currentTitle is a get only property"说得很清楚:currentTitle是只读属性,它的作用只是让你获取按钮当前显示的标题内容,根本不允许直接赋值修改,所以你直接给它赋值肯定会报错啦。
正确修改按钮标题的方法
UIButton的标题是和状态绑定的(比如正常状态、高亮状态、选中状态等),所以官方提供了专门的方法来设置标题:setTitle(_:for:)。
结合你的代码,只需要把原来的赋值语句改成下面这样:
choice1Button.setTitle(storyBrain.firstStory().1, for: .normal)
这里的.normal就是按钮的默认正常状态,如果你需要在其他状态下显示不同标题,替换成对应的状态(比如.highlighted、.selected)就行。
另外要注意,如果storyBrain.firstStory().1返回的是可选类型的String?,你可以用更安全的可选绑定处理:
if let buttonTitle = storyBrain.firstStory().1 { choice1Button.setTitle(buttonTitle, for: .normal) }
关于attributedTitle的正确用法
你提到尝试用attributedTitle时Normal相关选项报错,那是因为你用错了方式。如果想设置富文本标题,同样要用对应的方法setAttributedTitle(_:for:),而不是直接给attributedTitle属性赋值。举个例子:
// 先创建富文本对象 let attributedTitle = NSAttributedString( string: storyBrain.firstStory().1, attributes: [ NSAttributedString.Key.foregroundColor: UIColor.red, NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 18) ] ) // 给按钮设置富文本标题 choice1Button.setAttributedTitle(attributedTitle, for: .normal)
这样就能正常设置带样式的标题啦~
内容的提问来源于stack exchange,提问作者desertRat
相关产品推荐
相关产品推荐

