我想创建@IBInspectable
元素,如下图所示:
我的想法是使用像枚举这样的东西作为@IBInspectable
的类型,但看起来不是这样的,你有什么想法来实现这样的元素吗?
编辑:
看起来@IBInspectable
只支持这些类型:
Int
CGFloat
Double
String
Bool
CGPoint
CGSize
CGRect
UIColor
UIImage
失败者
发布于 2015-02-27 02:09:08
这是不可能的(目前而言)。您只能使用在用户定义的运行时属性部分中看到的那些类型。
来自苹果的doc
对于接口生成器定义的运行时特性所支持的任何类型,您可以将IBInspectable特性附加到类声明、类扩展或类别中的任何特性:布尔值、整数或浮点数、字符串、本地化字符串、矩形、点、大小、颜色、范围和nil。
发布于 2015-10-22 22:07:18
此问题的另一个解决方法是改变枚举属性在接口生成器中的显示方式。例如:
#if TARGET_INTERFACE_BUILDER
@property (nonatomic, assign) IBInspectable NSInteger fontWeight;
#else
@property (nonatomic, assign) FontWeight fontWeight;
#endif
这里假设有一个名为FontWeight的枚举。它依赖于枚举及其原始整数值在Objective-C中可以在某种程度上互换使用的事实。这样做之后,您可以在接口构建器中为属性指定一个整数,这不是理想的,但可以工作,并且在以编程方式使用相同属性时保留了少量的类型安全。
这是一个比声明单独的整数属性更好的选择,因为您不需要编写额外的逻辑来处理第二个整数属性,该属性也可以用来完成相同的事情。
然而,这并不适用于Swift,因为我们不能隐式地将整数转换为枚举。任何关于解决这个问题的想法都将不胜感激。
发布于 2015-05-28 09:19:00
我使用一个可检查的NSInteger值来完成此操作,并重写setter以允许它设置枚举。这具有不使用弹出式列表的限制,并且如果您更改枚举值,则界面选项将不会更新以匹配。
举例说明。
在头文件中:
typedef NS_ENUM(NSInteger, LabelStyle)
{
LabelStyleContent = 0, //Default to content label
LabelStyleHeader,
};
...
@property LabelStyle labelStyle;
@property (nonatomic, setter=setLabelAsInt:) IBInspectable NSInteger labelStyleLink;
在实现文件中:
- (void)setLabelAsInt:(NSInteger)value
{
self.labelStyle = (LabelStyle)value;
}
您可以选择在其中添加一些逻辑,以确保将其设置为有效值
https://stackoverflow.com/questions/28749598
复制相似问题