Xcode 9 borderColor 在用户定义的运行时属性中不起作用
Xcode 9 borderColor doesn't work in User Defined Runtime Attributes
我正在使用这个 CALayer
扩展程序:
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
我想也许是因为这个扩展,我的 borderColor
页面底部的提交按钮没有变成白色(正如我希望的那样):
但是不,我连接了一个 IBOutlet
并尝试像这样直接设置颜色:
submitButton.layer.borderColor = UIColor.white.cgColor
在 viewDidLoad
、viewWillAppear
和 viewDidAppear
中做了,因为我知道在上次大更新 (iOS 10) 中,帧渲染发生了根本性的变化( 1000x1000 帧的东西),也许现在有一些类似的改动。不过运气不好。
我在 iOS 9、10 和 11 中进行了测试。这与 OS 无关,而是与环境有关。我正在使用 Xcode 9 Beta 5。有什么解决办法吗?
清除了项目,删除了派生数据,代码现在可以在 viewDidLoad
、viewWillAppear
或 viewDidAppear
中运行。
问题显然与 用户定义的运行时属性 有关。 Xcode 9 不再接受这里的扩展变量。或者,至少是 Beta 5 版本。
编辑:确实,添加 @objc
解决了问题。
尝试用 @objc
修饰您的 var 声明,如下所示:
@objc var borderUIColor: UIColor {
...
}
应该可以解决您的问题
刚遇到同样的问题,得到了另一个解决方案:我刚刚让我的 class KVC 兼容。
示例,逐步:
- 自定义 class 是 XTCMenuItem,具有 属性 propIdentifier。
- 为了符合 KVC,这个 class 得到了两个方法:
- 覆盖函数值(forKey 键:字符串)-> 任何?
- 重写 func setValue(_ value:
有吗?,forKey key: String)
- 在 Identity Inspector 中,我设置了自定义 class
到 "XTCMenuItem",并添加用户定义的运行时属性
"propIdentifier" 类型 "String" 和一个字符串值。
使用@IBInspectable 属性。
示例:
@IBInspectable var borderColor = UIColor.green
如果您不想创建 IBOutlet 而只是使用运行时属性,那么您可以使用 IBDesignable 并设置前缀 @objc 它会解决您的问题。
@objc @IBInspectable var borderColor: UIColor {
get {
return UIColor(cgColor: self.layer.borderColor!)
}
set {
self.layer.borderColor = newValue.cgColor
}
}
我正在使用这个 CALayer
扩展程序:
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
我想也许是因为这个扩展,我的 borderColor
页面底部的提交按钮没有变成白色(正如我希望的那样):
但是不,我连接了一个 IBOutlet
并尝试像这样直接设置颜色:
submitButton.layer.borderColor = UIColor.white.cgColor
在 viewDidLoad
、viewWillAppear
和 viewDidAppear
中做了,因为我知道在上次大更新 (iOS 10) 中,帧渲染发生了根本性的变化( 1000x1000 帧的东西),也许现在有一些类似的改动。不过运气不好。
我在 iOS 9、10 和 11 中进行了测试。这与 OS 无关,而是与环境有关。我正在使用 Xcode 9 Beta 5。有什么解决办法吗?
清除了项目,删除了派生数据,代码现在可以在 viewDidLoad
、viewWillAppear
或 viewDidAppear
中运行。
问题显然与 用户定义的运行时属性 有关。 Xcode 9 不再接受这里的扩展变量。或者,至少是 Beta 5 版本。
编辑:确实,添加 @objc
解决了问题。
尝试用 @objc
修饰您的 var 声明,如下所示:
@objc var borderUIColor: UIColor {
...
}
应该可以解决您的问题
刚遇到同样的问题,得到了另一个解决方案:我刚刚让我的 class KVC 兼容。
示例,逐步:
- 自定义 class 是 XTCMenuItem,具有 属性 propIdentifier。
- 为了符合 KVC,这个 class 得到了两个方法:
- 覆盖函数值(forKey 键:字符串)-> 任何?
- 重写 func setValue(_ value: 有吗?,forKey key: String)
- 在 Identity Inspector 中,我设置了自定义 class 到 "XTCMenuItem",并添加用户定义的运行时属性 "propIdentifier" 类型 "String" 和一个字符串值。
使用@IBInspectable 属性。 示例:
@IBInspectable var borderColor = UIColor.green
如果您不想创建 IBOutlet 而只是使用运行时属性,那么您可以使用 IBDesignable 并设置前缀 @objc 它会解决您的问题。
@objc @IBInspectable var borderColor: UIColor {
get {
return UIColor(cgColor: self.layer.borderColor!)
}
set {
self.layer.borderColor = newValue.cgColor
}
}