如果NSTextfield为空,则禁用/启用NSButton

时间:2010-09-16 11:31:33

标签: cocoa nstextfield nsbutton

我是可可的新手。我的应用程序中有一个按钮和一个textField。我想在textfield为空时禁用该按钮,并在用户输入内容时启用。

任何要点开始? Interface Builder中的任何“魔术”绑定?

由于

[EDITED]

我曾尝试将appDelegate设置为NSTextfield的委托,并添加了此方法(myTextfield和myButton是IBOutlets):

- (void)textDidChange:(NSNotification *)aNotification
{
    if ([[myTextField stringValue]length]>0) {
        [myButton setEnabled: YES];
    }
    else {
        [myButton setEnabled: NO];
    }
}

但没有任何反应......

4 个答案:

答案 0 :(得分:14)

  

我曾尝试将appDelegate设置为NSTextfield的委托,并添加了此方法(myTextfield和myButton是IBOutlets):

- (void)textDidChange:(NSNotification *)aNotification
{
    if ([[myTextField stringValue]length]>0) {
        [myButton setEnabled: YES];
    }
    else {
        [myButton setEnabled: NO];
    }
}

这是艰难的方式,但它应该工作得很好。要么您没有将文本字段的delegate出口连接到此对象,您还没有将myTextField出口连接到文本字段,或者您还没有连接{{1}按钮出口。

另一种方法是给控制器一个暴露字符串值的属性,将文本字段的myButton绑定绑定到此value属性,并将按钮的stringValue绑定绑定到控制器的enabled

您还可以为控制器提供两个属性,一个具有布尔值,并将其设置为依赖于字符串属性,并将按钮绑定到该属性。这是一个更清洁,可能更强大的解决方案,虽然它是更多的工作。

答案 1 :(得分:9)

这是使用绑定的解决方案。

下面我设置一个绑定到文件所有者的“text”属性的NSTextField。 “text”是一个NSString。 我被“持续更新价值”所吸引。认为我的解决方案不起作用,但实际上并没有像用户输入那样更新,只有在文本字段失去焦点时才会更新。

Binding the NSTextField to the file's owner NSString text property

现在在按钮上设置绑定,只需将其启用状态设置为文件所有者文本属性的长度。

Binding the NSButton's enabled state to the text property's length

Annd,工作产品。

enter image description here enter image description here

答案 2 :(得分:4)

如果你使用controlTextDidChange而不是textDidChange,你可以摆脱通知的东西,只依赖于NSTextField的委托。

答案 3 :(得分:0)

谢谢彼得。我错过了(在我的硬版本中)是appDelegate中awakeFromNib中的这段代码:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(textDidChange:) name:NSControlTextDidChangeNotification object:myTextField];

它完美无缺。现在我正在尝试简单的方法,但我担心我对绑定还不够好。

绑定属性

@property (retain) IBOutlet NSString *aStringValue;

使用textfield的值,我必须在IB中使用“Bind to:”,“Controller Key”和“Model Key Path”?