我有一个自定义的UITableViewController子类,我在nib文件中的两个地方使用它。如果我希望这两个实例的行为略有不同,我该怎么办?当然在代码中我可以根据BOOL的值选择一种行为或另一种行为,但是如何从Interface Builder中设置BOOL,而不必编写Interface Builder插件?
答案 0 :(得分:7)
从Xcode 6开始,有一种新方法可以做到这一点。您现在可以为视图属性提供IBInspectable属性,然后您可以像使用标准视图一样在IB中编辑这些属性。
例如:
@property (nonatomic, strong) IBInspectable BOOL
Apples文档中的更多详细信息(也适用于新属性IBDesignable):https://developer.apple.com/library/ios/recipes/xcode_help-IB_objects_media/chapters/CreatingaLiveViewofaCustomObject.html
答案 1 :(得分:3)
"用户定义的运行时属性"在身份检查器中可能正是您正在寻找的。这个seems to be new从Xcode 4.2开始。
不幸的是,Apple Developer网站上似乎没有关于此功能的文档(任何?)。我能够将它用于一个简单的属性集。
答案 2 :(得分:2)
据我所知,如果不编写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
由于它是IBOutlet
,您可以像在Interface Builder中的任何其他委托一样连接委托。
当您需要确定视图的行为方式时,请致电[delegate customViewShouldBeFunky:self]
。
答案 3 :(得分:0)
有两个子类可能更容易,并且更容易记录。
答案 4 :(得分:0)
以下是覆盖属性并在自定义类中设置它们的示例,这可能会有所帮助。在调用awakeFromNib之前,属性代码将起作用。因此,您可以根据用户在awakeFromNib中的决策权来决定您要做什么。