gpt4 book ai didi

cocoa - 如何将 NSButton 启用状态绑定(bind)到组合条件

转载 作者:行者123 更新时间:2023-12-03 16:51:29 28 4
gpt4 key购买 nike

这是我在 Xcode Interface Builder 中的情况:

IB situation

实体模式下还有一个NSArrayController,它控制NSTableView的内容。我想在 NSTableView 为空(由 NSSearchField 控制)时启用“创建”按钮并且当 NSSearchField 中的文本不为空时。我该如何实现这一目标?不编程可以吗?

我可以将“创建”按钮的 2 个启用条件绑定(bind)到哪些 KVO 兼容值?

最佳答案

我认为没有办法完全在界面生成器中完成此操作,但只需少量代码即可轻松使其工作。首先,确保您的 Controller (或应用程序委托(delegate))被设置为搜索字段的委托(delegate),并且它具有与搜索字段、按钮和数组 Controller 的 IBOutlet 连接。以下是我的实现方法:

// This is an arbitrary pointer to indicate which property has changed.
void *kObjectsChangedContext = &kObjectsChangedContext;

- (void)awakeFromNib {

// Register as an observer so we're notified when the objects change, and initially at startup.
[arrayController addObserver:self
forKeyPath:@"arrangedObjects"
options:NSKeyValueObservingOptionInitial
context:kObjectsChangedContext];
}

// This updates the button state (based on your specs)
- (void)updateButton {

BOOL canCreate = (searchField.stringValue.length > 0 &&
0 == [arrayController.arrangedObjects count]);
[createButton setEnabled:canCreate];
}

// This delegate method is called whenever the text changes; Update the button.
- (void)controlTextDidChange:(NSNotification *)obj {
[self updateButton];
}

// Here's where we get our KVO notifications; Update the button.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

if (kObjectsChangedContext == context)
[self updateButton];

// It's good practice to pass on any notifications we're not registered for.
else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}

如果您不熟悉绑定(bind),其中一些可能看起来像希腊语,希望注释足够清楚。

关于cocoa - 如何将 NSButton 启用状态绑定(bind)到组合条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8685355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com