禁用/启用nsbutton如果nstextfield为空或不为
-
03-10-2019 - |
题
我是可可的新手。我的应用中有一个按钮和一个文字字段。当用户键入某种内容时,当TextField为空并启用时,我希望禁用该按钮。
有任何点开始吗?接口构建器中有任何“魔术”绑定?
谢谢
编辑
我试图将AppDelegate设置为Nstextfield的代表,并添加了此方法(MyTextfield和Mybutton是Iboutlets):
- (void)textDidChange:(NSNotification *)aNotification
{
if ([[myTextField stringValue]length]>0) {
[myButton setEnabled: YES];
}
else {
[myButton setEnabled: NO];
}
}
但是什么都没有发生...
解决方案
我试图将AppDelegate设置为Nstextfield的代表,并添加了此方法(MyTextfield和Mybutton是Iboutlets):
- (void)textDidChange:(NSNotification *)aNotification { if ([[myTextField stringValue]length]>0) { [myButton setEnabled: YES]; } else { [myButton setEnabled: NO]; } }
那是困难的方法,但它应该可以正常工作。您是否尚未连接文本字段 delegate
这个对象的出口,您没有挂上 myTextField
文本字段的出口,或者您没有挂上 myButton
出口到按钮。
另一种方法是给控制器一个属性公开字符串值,绑定文本字段的 value
与此结合 stringValue
属性,并绑定按钮的 enabled
与控制器的结合 stringValue.length
.
您还可以给控制器两个属性,一个具有布尔值,并将其设置为依赖字符串属性,然后将按钮绑定到该按钮。这是一个更干净的解决方案,尽管它是更多的工作,但可能更强大。
其他提示
这是使用绑定的解决方案。
在下面,我设置了一个绑定到文件所有者的“文本”属性的nstextfield。 “文本”是NSString。 我被“不断更新价值”所抓住。 认为我的解决方案不起作用,但实际上它并没有随着用户的键入而更新,只有当Textfield失去焦点时,它才会更新。
现在,在按钮上设置绑定,只需将其启用状态设置为文件所有者文本属性的长度即可。
Annd,工作产品。
如果您使用ControlTextDidchange而不是TextDidchange,则可以摆脱通知内容,而只依靠是Nstextfield的代表。
谢谢彼得。我错过的(以我的艰难版本)是Appdelegate中的Awakefromnib中的这件代码:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(textDidChange:) name:NSControlTextDidChangeNotification object:myTextField];
它的工作原理。现在,我正在尝试简单的方法,但是我担心我对绑定还不够好。
约束财产
@property (retain) IBOutlet NSString *aStringValue;
有了TextField的值,我必须在IB中使用的内容“绑定到:”,“控制器密钥”和“模型密钥路径”?