我对Objective C和iOS开发非常陌生,但我确实对其他几种语言有一点经验。
我目前正在为自己开发一个实验性学习应用程序,我想为UIButton添加一个属性。我想要添加的属性是我试图定义的枚举类型,但是我很难理解范围,知道在哪里定义枚举以及是否有必要使用typedef(不太熟悉)至少还有typedef)。
所以,我的问题是我在哪里以及如何定义一个枚举,以便能够使用枚举作为属性值来扩展现有框架的一部分。这是一个满嘴......嘿。
谢谢, 添
答案 0 :(得分:0)
编辑以反映所提出的真实问题。
道歉。你的帖子似乎反映了对Objective-C的更天真的理解,而不是你真正拥有的。
坏消息是,在框架中向类扩展添加属性不是您可以做的事情。 Apple声明:
类扩展与类别有一些相似之处,但它只能添加到编译时拥有源代码的类...
< / p>
如果子类无法满足您的需要,您可以将类别与关联对象一起使用。一个很好的例子是here。
答案 1 :(得分:0)
Apple提供了一个宏。这最显着地增加了自动完成。
typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
UITableViewCellStyleDefault = 0,
UITableViewCellStyleValue1,
UITableViewCellStyleValue2,
UITableViewCellStyleSubtitle
};
表示不同的值。
如果你想要选择多个选项的位掩码,可以使用NS_OPTIONS
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
用作位掩码
UIViewAutoresizing resizing = (UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin)
如果您希望能够从课外设置它,请将其添加到头文件
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSUInteger, InsetCellAlignment){
InsetCellAlignmentLeft,
InsetCellAlignmentRight
};
@interface InsetCell : UITableViewCell
@property InsetCellAlignment alignment;
@property(nonatomic)CGFloat inset;
@end
如果你需要在一些状态下扩展UIButton,这是一个强有力的指示,你没有正确使用MVC。控制器应该知道状态并分别配置按钮。
那就是说你可以使用&#34; Associative References&#34;来获得你想要的结果。可用于模拟添加的成员变量。 IMO他们很臭,我从来没用过它们。