我是可可的新手。我的应用程序中有一个按钮和一个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];
}
}
但没有任何反应......
答案 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。 我被“持续更新价值”所吸引。认为我的解决方案不起作用,但实际上并没有像用户输入那样更新,只有在文本字段失去焦点时才会更新。
现在在按钮上设置绑定,只需将其启用状态设置为文件所有者文本属性的长度。
Annd,工作产品。
答案 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”?