Objective c 通过Interface Builder在自定义对象上设置特性

Objective c 通过Interface Builder在自定义对象上设置特性,objective-c,cocoa,cocoa-touch,Objective C,Cocoa,Cocoa Touch,我有一个自定义的UITableViewController子类,我在nib文件的两个位置使用它。如果希望这两个实例的行为略有不同,我应该怎么做?当然,在代码中,我可以根据BOOL的值选择一种或另一种行为,但如何从Interface Builder设置BOOL,而不必编写Interface Builder插件?有两个子类可能更容易,也更容易记录。据我所知,如果不编写IB插件,就无法在IB中设置参数 也就是说,你还有两个选择 如果它像单个BOOL一样简单,那么最好将其作为MyCustomViewCo

我有一个自定义的UITableViewController子类,我在nib文件的两个位置使用它。如果希望这两个实例的行为略有不同,我应该怎么做?当然,在代码中,我可以根据BOOL的值选择一种或另一种行为,但如何从Interface Builder设置BOOL,而不必编写Interface Builder插件?

有两个子类可能更容易,也更容易记录。

据我所知,如果不编写IB插件,就无法在IB中设置参数

也就是说,你还有两个选择

如果它像单个BOOL一样简单,那么最好将其作为
MyCustomViewController
类的属性,并在初始化后在代码中设置:

customViewController = [[MyCustomViewController alloc]initWithNibName:@"CustomViewController" bundle:nil];
[customViewController setFunky:YES];
另一个选项是为
MyCustomViewDelegate
创建协议。如果您不熟悉协议,您的标题将如下所示:

@class MyCustomViewController;

@protocol MyCustomViewDelegate
@required
-(BOOL)customViewShouldBeFunky:(MyCustomViewController*)customView;
@end

@interface MyCustomViewController : UIViewController {
  NSObject<MyCustomViewDelegate>  *delegate;
}
@property (readwrite, retain) IBOutlet NSObject<MyCustomViewDelegate> *delegate;
@end
@class MyCustomViewController;
@协议MyCustomViewDelegate
@必需的
-(BOOL)CustomViewshouldbounky:(MyCustomViewController*)customView;
@结束
@接口MyCustomViewController:UIViewController{
NSObject*委托;
}
@属性(读写、保留)IBNSObject*委托;
@结束
由于它是一个
IBOutlet
,因此可以像Interface Builder中的任何其他代理一样连接该代理

然后在需要确定视图的行为方式时调用
[delegate customViewShouldBeFunky:self]

身份检查器中的“用户定义的运行时属性”可能就是您想要的。这是从Xcode 4.2开始的


不幸的是,苹果开发者网站上似乎没有太多(任何?)关于此功能的文档。我可以将它用于一个简单的属性集。

从Xcode 6开始,有一种新的方法可以做到这一点。现在,您可以为视图属性指定IBInspectable属性,然后可以在IB中编辑这些属性,就像使用和标准视图一样

例如:

@property (nonatomic, strong) IBInspectable BOOL

苹果文档中的更多详细信息(也适用于新属性IBDesignable):

这里是一个覆盖属性并在自定义类中设置属性的示例,这可能会有所帮助。属性代码将在调用awakeFromNib之前工作。因此,您可以根据用户在awakeFromNib中的决定来决定必须做什么


为什么不能用代码完成?我甚至不用为iphone使用IB,iphone应用程序的简单用户界面没有多大意义。嗨,Umair,你的最后两个答案指向一个已删除的答案,我想你正在点击这个链接。尽管如此,由于它们可能会被删除,作为链接唯一的答案,您应该充实它们。一般来说,这最好是一个评论(我知道你不能低于50个代表)