我正在尝试向IBInspectableUIView添加颜色,以便我可以在故事板中设置它,然后在代码中使用它。在这篇关于 UITextField 的帖子中,我已经看到我可以利用扩展和添加计算属性,但我不能让它为 UIView 工作。
我遇到了崩溃:无法在(UIView)上设置(additionalColor1)用户定义的检查属性:[setValue:forUndefinedKey:]:此类不符合键 additionalColor1 的键值编码。
知道是什么导致了崩溃以及如何修复它?
这是我的代码:
extension UIView {
@IBInspectable var additionalColor1: UIColor? {
return self.additionalColor1
}
}
Run Code Online (Sandbox Code Playgroud)
作为参考,我粘贴了可用于为 UITextField 设置占位符颜色的代码(与上面的 url 相同)。这工作正常:
extension UITextField {
@IBInspectable var placeHolderColor: UIColor? {
get {
return self.placeHolderColor
}
set {
self.attributedPlaceholder = NSAttributedString(string: self.placeholder != nil ? self.placeholder! : "", attributes:[NSForegroundColorAttributeName: newValue!])
}
}
}
Run Code Online (Sandbox Code Playgroud) 我对IBDesignables和比较陌生IBInspectable,我注意到很多教程都IBInspectable以这种方式使用。
@IBInspectable var buttonBorderWidth: CGFloat = 1.0 {
didSet {
updateView()
}
}
func updateView() {
// Usually there are more entries here for each IBInspectable
self.layer.borderWidth = buttonBorderWidth
}
Run Code Online (Sandbox Code Playgroud)
但在某些情况下,他们会像这样使用 get 和 set
@IBInspectable
var shadowOpacity: Float {
get {
return layer.shadowOpacity
}
set {
layer.shadowOpacity = newValue
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下:每种情况下发生了什么以及如何选择使用哪一种?
我有一个这样的类,并且此IB foo1在检查窗格中未显示该属性。
@IBDesignable
final class Foo: UIView {
@IBInspectable var bar1 = CGFloat(0)
}
Run Code Online (Sandbox Code Playgroud)
怎么了?
(Xcode 10.1)
我正在创建自定义平行四边形视图,并且视图使用默认偏移值渲染得很好。但是当我改变 ib 的偏移值时它不起作用
@IBDesignable class CustomParallelogramView: UIView {
@IBInspectable var offset: Float = 10.0
var path = UIBezierPath()
lazy var shapeLayer: CAShapeLayer = {
let layer = CAShapeLayer()
layer.path = path.cgPath
return layer
}()
override init(frame: CGRect) {
super.init(frame:frame)
drawParallelogram()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
drawParallelogram()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
drawParallelogram()
}
override func layoutSubviews() {
super.layoutSubviews()
updateFrame()
}
func drawParallelogram() {
print(offset)
path.move(to: CGPoint(x: bounds.minX + CGFloat(offset), y: bounds.minY))
path.addLine(to: CGPoint(x: bounds.maxX, y: bounds.minY))
path.addLine(to: …Run Code Online (Sandbox Code Playgroud) 我按照这里的教程创建了一个可检查和可设计的视图.我只想添加边框颜色,边框宽度和圆角边框功能UIView.
我成功地展示了这些属性.但是无论我在故事板上设置什么,结果仍然就像他们不在那里一样.没有边框,即使我将边框设置为宽2和黑色.它没有在故事板和运行时显示.我已将边框设置为2宽度,但在运行时,我在didViewLoad处打印边框宽度值,结果为0.可能出现什么问题?
@IBDesignable extension view: UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
@IBInspectable var borderWidth: CGFloat {
get {
return layer.borderWidth;
}
set {
layer.borderWidth = borderWidth;
}
}
@IBInspectable var borderColor: UIColor? {
get {
return UIColor(CGColor: layer.borderColor!);
}
set {
layer.borderColor = borderColor?.CGColor
}
}
}
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
@IBDesignable class BOView: UIView {
@IBInspectable var cornerRadius: CGFloat { …Run Code Online (Sandbox Code Playgroud) 是否可以同时拥有CornerRaduis和 阴影UIView?
我建立了一个自定义类的UIView,它使用@IBInspectable设置cornerRadius和addShadow可以是true或false。当我设置cornerRadius阴影不显示时,如果我拿走cornerRadius它,它会再次显示。提前致谢!
自定义类:
import UIKit
class CustomUIView: UIView {
override func awakeFromNib() {
self.layer.masksToBounds = cornerRadius > 0
}
@IBInspectable var useDefaultRadius: Bool = true {
didSet {
self.layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var cornerRadius: CGFloat {
set {
self.layer.cornerRadius = newValue
}
get {
if (useDefaultRadius) {
// Set default radius
self.layer.cornerRadius = 23
} …Run Code Online (Sandbox Code Playgroud)