UIButton 文本内容每秒更新一次

Posted

技术标签:

【中文标题】UIButton 文本内容每秒更新一次【英文标题】:UIButton text content keeps resetting every second update 【发布时间】:2016-08-29 10:10:11 【问题描述】:

我正在尝试使用测试值更新按钮,并且我注意到每秒更新按钮标题文本会在几分之一秒内显示测试值,但随后会重置为按钮的默认值。

这似乎是一个错误,但我想看看是否有更简单的解释。 我尝试在按下按钮之前等待最多 10 秒,但这似乎一直在发生。

任何想法如何使 UIButton 按预期工作?

import UIKit

class ViewController: UIViewController 

    var testEntry = "its working"
    @IBOutlet weak var testButton: UIButton!
    @IBOutlet weak var testLabel: UILabel!

    @IBAction func runTest(sender:
        UIButton) 
        // The button value should equal the value of the label value, but every 2nd button press of the test button results in the title of the button value resetting to the default value
        dispatch_async(dispatch_get_main_queue()) 
            self.testLabel.text = "\(self.testEntry)"
            self.testButton.titleLabel?.text = "\(self.testEntry)"
        
    

Here 是 github 项目。

【问题讨论】:

setTitle 方法状态总是有效,但有时直接将值设置为 tittlelabel 工作 如果该功能不能始终如一地工作,听起来应该删除设置的标题 我在 Objective C 和 Swift 中也遇到过很多次类似的问题,所以分享一下我的经验 【参考方案1】:

您不应该直接设置按钮标题标签的文本,您应该只将字体直接设置到标签上。文本应该通过调用来设置

func setTitle(_ title: String?, forState state: UIControlState)

文本切换是因为您正在选择和取消选择按钮,该按钮在其某些具有不同标题的状态之间切换。

【讨论】:

感谢可爱的解释。我实际上以前有这个问题,但忘记了。苹果真的应该解决这个问题或弃用它 向 Apple 提交的错误报告。尝试直接分配标题文本应该无法编译,因为尝试设置只读属性。【参考方案2】:

您应该使用以下方法设置按钮标题文本...

self.testButton.setTitle(self.testEntry, forState: .Normal)

而不是titleLabel 属性。

【讨论】:

【参考方案3】:

斯威夫特 5

self.testButton.setTitle("hello", for: .normal)

【讨论】:

以上是关于UIButton 文本内容每秒更新一次的主要内容,如果未能解决你的问题,请参考以下文章

添加子视图后UIButton无法点击

停止重复使用自定义单元格 Swift

如何更改 UIButton 标题?

UI控件(UIButton)

UIButton 动作

随机交换 4 个 UIButton 的位置