首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >@IBInspectable with enum?

@IBInspectable with enum?
EN

Stack Overflow用户
提问于 2015-02-27 02:02:55
回答 7查看 26.5K关注 0票数 89

我想创建@IBInspectable元素,如下图所示:

我的想法是使用像枚举这样的东西作为@IBInspectable的类型,但看起来不是这样的,你有什么想法来实现这样的元素吗?

编辑:

看起来@IBInspectable只支持这些类型:

  • Int
  • CGFloat
  • Double
  • String
  • Bool
  • CGPoint
  • CGSize
  • CGRect
  • UIColor
  • UIImage

失败者

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-02-27 02:09:08

这是不可能的(目前而言)。您只能使用在用户定义的运行时属性部分中看到的那些类型。

来自苹果的doc

对于接口生成器定义的运行时特性所支持的任何类型,您可以将IBInspectable特性附加到类声明、类扩展或类别中的任何特性:布尔值、整数或浮点数、字符串、本地化字符串、矩形、点、大小、颜色、范围和nil。

票数 28
EN

Stack Overflow用户

发布于 2015-10-22 22:07:18

此问题的另一个解决方法是改变枚举属性在接口生成器中的显示方式。例如:

代码语言:javascript
复制
#if TARGET_INTERFACE_BUILDER
@property (nonatomic, assign) IBInspectable NSInteger fontWeight;
#else
@property (nonatomic, assign) FontWeight fontWeight;
#endif

这里假设有一个名为FontWeight的枚举。它依赖于枚举及其原始整数值在Objective-C中可以在某种程度上互换使用的事实。这样做之后,您可以在接口构建器中为属性指定一个整数,这不是理想的,但可以工作,并且在以编程方式使用相同属性时保留了少量的类型安全。

这是一个比声明单独的整数属性更好的选择,因为您不需要编写额外的逻辑来处理第二个整数属性,该属性也可以用来完成相同的事情。

然而,这并不适用于Swift,因为我们不能隐式地将整数转换为枚举。任何关于解决这个问题的想法都将不胜感激。

票数 24
EN

Stack Overflow用户

发布于 2015-05-28 09:19:00

我使用一个可检查的NSInteger值来完成此操作,并重写setter以允许它设置枚举。这具有不使用弹出式列表的限制,并且如果您更改枚举值,则界面选项将不会更新以匹配。

举例说明。

在头文件中:

代码语言:javascript
复制
typedef NS_ENUM(NSInteger, LabelStyle)
{
    LabelStyleContent = 0, //Default to content label
    LabelStyleHeader,
};

...

@property LabelStyle labelStyle;
@property (nonatomic, setter=setLabelAsInt:) IBInspectable NSInteger labelStyleLink;

在实现文件中:

代码语言:javascript
复制
- (void)setLabelAsInt:(NSInteger)value
{
    self.labelStyle = (LabelStyle)value;
}

您可以选择在其中添加一些逻辑,以确保将其设置为有效值

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28749598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档