Swift @IBDesignable - @IBInspectable 多变量
Swift @IBDesignable - @IBInspectable multiple variables
我正在尝试为 UILabel
创建一个自定义 class,这样我就可以从情节提要中看到结果。我需要更改文本属性才能创建大纲标签。
使用我目前拥有的代码,我可以设法做到这一点,但是我只能添加一个变量。
如果我有多个 var
我会收到以下错误。
> 'var' declarations with multiple variables cannot have explicit
> getters/setters 'var' cannot appear nested inside another 'var' or
> 'let' pattern Getter/setter can only be defined for a single variable
如何使用多个变量?
代码:
import UIKit
@IBDesignable
class CustomUILabel: UILabel {
@IBInspectable var outlineWidth: CGFloat = 1.0, var outlineColor = UIColor.whiteColor() {
didSet {
let strokeTextAttributes = [
NSStrokeColorAttributeName : outlineColor,
NSStrokeWidthAttributeName : -1 * outlineWidth,
]
self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes)
}
}
}
正如我在评论中所说 - 您需要将每个变量放在不同的行中。这意味着您需要为它们都声明 didSet
。像这样:
import UIKit
@IBDesignable
class CustomUILabel: UILabel {
@IBInspectable var outlineWidth: CGFloat = 1.0 {
didSet {
self.setAttributes(self.outlineColor, outlineWidth: self.outlineWidth)
}
}
@IBInspectable var outlineColor = UIColor.whiteColor() {
didSet {
self.setAttributes(self.outlineColor, outlineWidth: self.outlineWidth)
}
}
func setAttributes(outlineColor:UIColor, outlineWidth: CGFloat) {
let strokeTextAttributes = [
NSStrokeColorAttributeName : outlineColor,
NSStrokeWidthAttributeName : -1 * outlineWidth,
]
self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes)
}
}
我正在尝试为 UILabel
创建一个自定义 class,这样我就可以从情节提要中看到结果。我需要更改文本属性才能创建大纲标签。
使用我目前拥有的代码,我可以设法做到这一点,但是我只能添加一个变量。
如果我有多个 var
我会收到以下错误。
> 'var' declarations with multiple variables cannot have explicit
> getters/setters 'var' cannot appear nested inside another 'var' or
> 'let' pattern Getter/setter can only be defined for a single variable
如何使用多个变量? 代码:
import UIKit
@IBDesignable
class CustomUILabel: UILabel {
@IBInspectable var outlineWidth: CGFloat = 1.0, var outlineColor = UIColor.whiteColor() {
didSet {
let strokeTextAttributes = [
NSStrokeColorAttributeName : outlineColor,
NSStrokeWidthAttributeName : -1 * outlineWidth,
]
self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes)
}
}
}
正如我在评论中所说 - 您需要将每个变量放在不同的行中。这意味着您需要为它们都声明 didSet
。像这样:
import UIKit
@IBDesignable
class CustomUILabel: UILabel {
@IBInspectable var outlineWidth: CGFloat = 1.0 {
didSet {
self.setAttributes(self.outlineColor, outlineWidth: self.outlineWidth)
}
}
@IBInspectable var outlineColor = UIColor.whiteColor() {
didSet {
self.setAttributes(self.outlineColor, outlineWidth: self.outlineWidth)
}
}
func setAttributes(outlineColor:UIColor, outlineWidth: CGFloat) {
let strokeTextAttributes = [
NSStrokeColorAttributeName : outlineColor,
NSStrokeWidthAttributeName : -1 * outlineWidth,
]
self.attributedText = NSAttributedString(string: self.text ?? "", attributes: strokeTextAttributes)
}
}