我是可可的新手。我的应用中有一个按钮和一个文字字段。当用户键入某种内容时,当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失去焦点时,它才会更新。

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

如果您使用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中使用的内容“绑定到:”,“控制器密钥”和“模型密钥路径”?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top