我需要在界面生成器中设置控件的“Enabled”属性,具体取决于他的首选项中的 2 个 bool 值。
但是运算符应该是 OR 而不是 AND。如果两者之一为真,则应启用我的控件。
目前,我只能使其与 AND 运算符一起使用(参见屏幕截图)。
谢谢
最佳答案
不幸的是,在 IB 中,你只能使用 and。我的建议是向您的 NIB(可能是您的 NIB 所有者)可访问的对象添加一个新属性,这取决于对其他对象的更改以启用您的控制/ View 。
看起来您正在使用共享用户默认值 Controller
,因此我建议您在所有者中为组合用户默认值创建一个新的 bool 属性(可能是downloadingCastOrCrew
) code>),然后您需要确保当任何一个默认值发生更改时,您都会更改 downloadingCastOrCrew
的值:
在您的界面中:
@property BOOL downloadingCastOrCrew;
在设置 Controller 时或 awakeFromNib 之后的实现中:
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
forKeyPath: @"values.kSearchPreferencesDownloadCast"
options:NSKeyValueObservingOptionNew
context:NULL];
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
forKeyPath: @"values.kSearchPreferencesDownloadCrew"
options:NSKeyValueObservingOptionNew
context:NULL];
在拆卸 Controller 时的实现中: [[NSUserDefaultsController共享UserDefaultsController]removeObserver: self forKeyPath: @"values.kSearchPreferencesDownloadCast"];
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver: self
forKeyPath: @"values.kSearchPreferencesDownloadCrew"];
如果您还没有观察者,请添加观察者:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.downloadingCastOrCrew = [defaults boolForKey: @"kSearchPreferencesDownloadCast"]
|| [defaults boolForKey: @"kSearchPreferencesDownloadCrew"];
}
通过使用访问器方法,您将触发 kvo,并且可以使用 Controller 的 downloadingCastOrCrew
作为 bool 值进行检查,而不是直接使用 NSUserDefaults 值。
显然,如果您已经有一个observeValueForKeyPath,您可能需要向addObserver:forKeyPath:options:context
调用添加一个上下文值,并在observeValueForKeyPath:ofObject中检查它:更改:上下文
调用。
关于objective-c - Interface Builder : Enabled1, 2 具有 OR 运算符的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15496160/