objective-c - Interface Builder : Enabled1, 2 具有 OR 运算符的属性

标签 objective-c macos cocoa

我需要在界面生成器中设置控件的“Enabled”属性,具体取决于他的首选项中的 2 个 bool 值。

但是运算符应该是 OR 而不是 AND。如果两者之一为真,则应启用我的控件。

目前,我只能使其与 AND 运算符一起使用(参见屏幕截图)。

enter image description here

谢谢

最佳答案

不幸的是,在 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/

相关文章:

mysql - 如何在 Mac OS 10.10.3 (Yosemite) 上使用 ODBC 将 R 连接到 MySQL 数据库

swift - 在登录时启动 OS X 应用程序

objective-c - 从加载的网页中获取文本字段信息 - Mac OS X 开发

objective-c - NS菜单项 : Truncation and setLineBreakMode

ios - 在 SKSpriteNode 内部调用自定义方法不起作用

ios - 如何绘制一个非矩形的 UITextView?

objective-c - 为什么 TableView 不显示绑定(bind)数据?

objective-c - static const int 对于数组大小来说不够好?

mysql - 如何更正 mysql.rb 驱动程序?

objective-c - 处理 NSPredicate 和带引号的参数(不一定成对)