@IBInspectable与枚举?
我想创build@IBInspectable
元素,如下图所示:
我的想法是使用类似于@IBInspectable
枚举类似的东西,但它看起来不是这种情况,任何想法如何实现像这样的元素?
编辑:
它看起来像@IBInspectable
只支持这些types:
-
Int
-
CGFloat
-
Double
-
String
-
Bool
-
CGPoint
-
CGSize
-
CGRect
-
UIColor
-
UIImage
长号
这是不可能的(现在)。 您只能使用在“ 用户定义的运行属性”部分中看到的那些types。
从苹果的文档 :
您可以将IBInspectable属性附加到类接口生成器定义的运行时属性所支持的任何types的类声明,类扩展或类别中的任何属性:布尔值,整数或浮点数,string,本地化string,矩形,点,大小,颜色,范围和零。
解决此问题的另一个解决方法是更改枚举属性如何显示为接口构build器。 例如:
#if TARGET_INTERFACE_BUILDER @property (nonatomic, assign) IBInspectable NSInteger fontWeight; #else @property (nonatomic, assign) FontWeight fontWeight; #endif
这假定一个名为FontWeight的枚举。 它依赖于枚举和它们的原始整数值在Objective-C中可以相互交换使用的事实。 这样做后,您可以指定一个在接口构build器中的一个整数的属性,这是不理想的,但工作,并保持less量的types安全性,当编程方式使用相同的属性。
这是比声明一个单独的整数属性更好的select,因为你不需要编写额外的逻辑来处理第二个整数属性,也可以用来完成同样的事情。
然而,这不适用于Swift,因为我们无法隐式地从一个整数转换为一个枚举。 任何想法解决这个将不胜感激。
我使用Inspectable NSInteger值执行此操作,并覆盖setter以允许它设置枚举。 这有没有使用popup列表的限制,如果你改变你的枚举值,那么接口选项将不会更新以匹配。
例。
在头文件中:
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; }
你可以select添加一些逻辑,以确保它被设置为一个有效的值
正如@sikhapol回答,这是不可能的。 我使用的解决方法是在我的课堂上有一堆IBInspectable
,只需在界面构build器中select一个。 为了增加安全性,没有设置多个,在每个setter中添加一个NSAssert
。
- (void)setSomeBool:(BOOL)flag { if (flag) { NSAssert(!_someOtherFlag && !_someThirdFlag, @"Only one flag can be set"); } }
这是一个单调乏味,有点草率的海事组织,但这是我能想到的完成这种行为的唯一方法
我想补充一点,一个enum
的标识符在运行时对Objective-C中的任何人都是不可用的。 所以不可能在任何地方显示。
我的解决办法是做:
@IBInspectable var keyboardType = UIKeyboardType.default.rawValue { didSet { textField.keyboardType = UIKeyboardType(rawValue: keyboardType)! } }
在IB本身,您将需要在keyboardType字段中设置一个int
- 为什么分配或初始化NSDateFormatter认为“昂贵”?
- 如何在iOS应用程序中每隔n分钟更新一次后台位置?
- 将writeToFile:primefaces:覆盖数据?
- 带有由string的第一个字母创build的部分的NSFetchedResultsController
- iOS应用程序显示logging器如何在不使用私有API的情况下logging屏幕?
- 如何更改UIBarButtonItem的字体?
- iOS如何设置应用程序图标和启动图像
- iOS 8:networking应用程序状态栏的位置和resize的问题
- (NSFetchedResultsController):无法读取caching文件来更新存储信息时间戳