titleLabel.text与Swift中的currentTitle

时间:2015-08-21 07:41:04

标签: swift uibutton

我正在尝试用Swift制作一个简单的计算器。我想得到"文字"在我创建的按钮上。本教程中的讲师使用了一个属性:

@IBAction func appendDigit(sender: UIButton) {
    let digit = sender.currentTitle
}

问题是,如果我这样做了:

@IBAction func appendDigit(sender: UIButton) {
    let digit = sender.titleLabel.text
}

区别是什么?他们会得到相同的结果吗? 如果是这样,怎么知道何时使用哪个?

3 个答案:

答案 0 :(得分:2)

titleLabel.text主要用于配置按钮的文本(针对每个州)

currentTitle是只读的。这主要用于获取当前显示的标题。

您无法设置此属性,因为只要按钮状态发生更改,此属性就会自动设置。您可以使用currentTitle获取与按钮关联的标题字符串,而不是使用titleLabel.text,因为只要按钮状态发生变化,就会自动设置currentTitle属性。

答案 1 :(得分:0)

sender.currentTitle

  

按钮上显示的当前标题。 (只读)

     

<强>声明

var currentTitle: String? { get }
     

<强>讨论

     

每当按钮时,都会自动设置此属性的值   国家变化。对于没有自定义标题字符串的州   与它们相关联,此方法返回当前的标题   显示,通常是与...相关联的   UIControlStateNormal状态。该值可能为零。

sender.titleLabel.text

  

显示a的currentTitle属性值的视图   按钮。 (只读)

     

<强>声明

var titleLabel: UILabel? { get }
     

<强>讨论

     

虽然此属性是只读的,但它自己的属性是   读/写。主要使用这些属性来配置文本   按钮。例如:

let button = UIButton.buttonWithType(.System) as UIButton
button.titleLabel.font = UIFont.systemFontOfSize(12)
button.titleLabel.lineBreakMode = .ByTruncatingTail
     

请勿使用标签对象设置文本颜色或阴影颜色。   相反,使用setTitleColor:forState:和   setTitleShadowColor:forState:这个类的方法来制作它们   变化。

     

即使按钮没有,titleLabel属性也会返回一个值   已经显示了。系统的属性值为nil   的按钮。

来自Apple Documentation

简单来说:

sender.titleLabel?.text = "NewTitle"  //this will work
sender.currentTitle = "newTitle"      //this will give you an error because it is read only property.

let digit = sender.currentTitle
let digit = sender.titleLabel!.text

这两个都有效,因为您正在阅读按钮的属性并将其分配给digit实例。

答案 2 :(得分:0)

.currentTitletitleLabel.text都返回相同的值, 但.currentTitle是只读的,你不能修改他的值(它只在iOS 8+中可用)。自iOS 3+开始提供.titleLabel,您可以修改textfont等。