我有以下代码集:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomView : UIView
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
@end
Run Code Online (Sandbox Code Playgroud)
#import "CustomView.h"
@implementation CustomView
- (void)setBorderColor:(UIColor *)borderColor {
_borderColor = borderColor;
self.layer.borderColor = borderColor.CGColor;
}
- (void)setBorderWidth:(CGFloat)borderWidth {
_borderWidth = borderWidth;
self.layer.borderWidth = borderWidth;
}
- (void)setCornerRadius:(CGFloat)cornerRadius {
_cornerRadius = cornerRadius;
self.layer.cornerRadius = cornerRadius;
}
@end
Run Code Online (Sandbox Code Playgroud)
(对于Swift参考,Swift代码也出现了这个问题)
@IBDesignable
class CustomView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: …Run Code Online (Sandbox Code Playgroud) 我知道IBInspectable-properties的默认值可以设置为:
@IBInspectable var propertyName:propertyType = defaultValue在斯威夫特.但是我如何在Objective-C中实现类似的效果,以便我可以在Interface Builder中将某些属性的默认值设置为某些属性?
我有创建IBDesignable和IBInspectable自定义类,为视图提供阴影和角半径
但是当我分配Designable类时view,我得到了Designable Build Failed
这是我的代码
import Foundation
import UIKit
@IBDesignable
class DesignableView: UIView {
}
@IBDesignable
class DesignableButton: UIButton {
}
@IBDesignable
class DesignableLabel: UILabel {
}
@IBDesignable
class DesignableTableView: UITableView {
}
extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
@IBInspectable
var borderWidth: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable
var …Run Code Online (Sandbox Code Playgroud) 对于那些不知道我在说什么的人,Xcode 6.0增加了新功能,IBDesignable和IBInspectable.
使用IBInspectable属性标记自定义视图时,这些属性将显示在IB中的"属性"检查器中.
同样,当您使用IBDesignable标记自定义UIView子类时,Xcode会编译您的视图并调用代码以在Xcode窗口中直接呈现视图对象,以便您可以看到它们的外观.
在自定义视图中添加IBDesignable和IBInspectable属性的技术在Swift和Objective-C中非常相似.IBInspectable属性显示在Interface Builder Attributes Inspector中,无论您使用哪种语言来定义它们.
我在Objective-C中创建了一个UIView类,并在Swift中创建了UIView的扩展,它将视图底层的borderWidth,cornerRadius,borderColor和layerBackgroundColor属性提升为视图的属性.如果更改属性,则扩展名/类别会根据需要键入转换,并将更改转发给图层.
IBInspectable部分运作良好.我看到并可以在IB属性检查器中设置新属性.
我可以在上周发誓,我的视图类别/扩展名上的IBDesignable属性也正常工作,我可以在IB中看到我的自定义UIView类别渲染,它具有更改的图层属性.本周它没有用.
我是产生幻觉的吗?
现有系统类的类别/扩展可以在使用IBDesignable设置时在Interface Builder中绘制自定义UI吗?
interface-builder ios xcode-storyboard ibdesignable ibinspectable
在swift中,我正在编写一个扩展(如Obj-C类),它在代码类方法中维护"房屋颜色".我想知道是否有一种方法可以使用IBInspectable或其他东西使接口构建器可以访问此颜色扩展,而不是将颜色专门附加到UIView子类,就像我在很多IBInspector样本用法中看到的那样.
extension UIColor {
// house blue
@IBInspectable var houseBlue: UIColor { return UIColor(red:(51/255), green:(205/255), blue:(255/255), alpha:(1)) }
// house gray
@IBInspectable var houseGray: UIColor { return UIColor(white:0.4, alpha: 1) }
// house white
@IBInspectable var houseWhite: UIColor { return UIColor.whiteColor() }
}
Run Code Online (Sandbox Code Playgroud) 对于我正在创建的iPad应用程序,我的项目中有一个包含多个颜色集的资产目录.我知道我可以将这些拖放到代码本身,并为@IBInspectable类属性的默认颜色这样做.但是,当我在Interface Builder中使用它们时,我的颜色集可用于UIView的背景颜色等属性,但它们不适用于@IBInspectable允许用户设置颜色的任何属性.有没有办法将我的颜色集暴露给我的@IBInspectable类到Interface Builder中可以选择的位置?当然,我总是可以通过编程方式设置它们,但是为了将来使用和方便起见,如果Apple目前支持它,我想让它工作.如果该信息相关,我的色彩资产目录肯定会添加到我的构建设置中的项目的Bundle Resources中.
我的问题截图:
第一张图像显示了我的颜色集可以选择的位置,如UIView的背景.接下来的两个展示了我们的@IBInspectable房产无法使用的地方.



我正在创建一个自定义类UIButton来增加挖掘区域.我需要用户可以在故事板中输入填充.所以我做了一个IBInspectable房产.
@IBDesignable class UIIconButton: UIButton {
@IBInspectable var touchPadding:UIEdgeInsets = UIEdgeInsetsZero
}
Run Code Online (Sandbox Code Playgroud)
但它没有在故事板中显示.但是,如果用CGRect它替换它,那么它在故事板中是可见的.
UIColor.named("myColor")自Xcode 9问世以来,我在整个应用程序中使用.虽然我在UITextField一个IBDesignable类的自定义实现中有一个镜头,但我一直收到以下错误:
错误:IB Designables:无法呈现和更新ViewController()的自动布局状态:代理程序崩溃
此外,我的类有几个IBInspectable属性,包括类型UIColor,但在这些属性的Interface Builder下拉列表中,我只能选择标准颜色,我的命名颜色不会像标准类属性那样显示.
以后一个问题作为第一个问题的线索,不满意和临时的解决方案是在我的IBDesignable课堂上不使用命名颜色.或者,不使用IBDesignable.
这可能是一个错误,但我想知道其他人是否遇到过这个问题,如果有任何修复,他们会想出来.
我有一个我正在创建的UIView被调用的子类MyView.
其中有一个UILabel(由于原因,这是在代码中添加而不是在InterfaceBuilder中).
然后,我有一个MyView被叫的财产color.
我想要的是让Interface Builder能够选择color,然后显示标签,并将字体设置为该颜色.
我的代码中有......
@IBDesignable class MyView: UIView {
private let textLabel = UILabel()
@IBInspectable var color: UIColor = .blackColor() {
didSet {
textLabel.textColor = color
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialSetup()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialSetup()
}
private func initialSetup() -> Void {
self.backgroundColor = .clearColor()
textLabel.textAlignment = .Center
textLabel.numberOfLines = 0
addSubview(textLabel)
}
override func layoutSubviews() { …Run Code Online (Sandbox Code Playgroud) 使用@IBDesignable类时,我突然发现一个奇怪且可重现的错误,@ IBInspectable属性发出以下警告:
Main.storyboard:warning:IB Designables:忽略"UIButton"实例上关键路径"test"的用户定义的运行时属性.尝试设置其值时遇到异常:[setValue:forUndefinedKey:]:此类与密钥测试不符合密钥值编码.
要明确这个警告只是Xcode中的一个问题,它打包很好.仍然很烦人!
重现步骤
使用@IBInspectable String属性创建自定义的@IBDesignable UIButton子类:
import UIKit
@IBDesignable
class TempButton: UIButton {
@IBInspectable var test:String = ""
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几个解决方案 - 不同的变量名称,使'test'属性成为可选,使用初始化程序,到目前为止没有运气.
以下是问题的截屏:
ibinspectable ×10
swift ×7
ibdesignable ×6
ios ×6
uicolor ×3
storyboard ×2
xcode ×2
objective-c ×1
xcode7 ×1
xcode9 ×1
xib ×1