【问题标题】:Disable/Enable NSButton if NSTextfield is empty or not如果 NSTextfield 为空,则禁用/启用 NSButton
【发布时间】:2010-09-16 11:31:33
【问题描述】:

我是可可的新手。我的应用程序中有一个按钮和一个 textField。我希望在文本字段为空时禁用该按钮,并在用户键入内容时启用该按钮。

有什么开始的吗? Interface Builder 中的任何“魔法”绑定?

谢谢

[编辑]

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

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

但是什么也没发生……

【问题讨论】:

  • 你能在你的情况下用 [myTextField.text isEqualToString: @""] 尝试同样的事情吗?

标签: cocoa nstextfield nsbutton


【解决方案1】:

我尝试将 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

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

【讨论】:

  • 你好彼得。几个月后,我需要用另一个应用程序再次解决这个问题。既然我对绑定(和可可)的了解更好,我已经尝试了您的解决方案,并且效果很好。而且只有一个属性和两个绑定! (比使用委托方法、观察者和插座要干净得多......)非常感谢
【解决方案2】:

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

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

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

Annd,工作产品。

【讨论】:

  • 不幸的是,Xcode 8 中的 UI 发生了一些变化。我创建了一个属性 dynamic var text : NSString 并能够将“self.text”绑定到文本字段,但我无法获得第二部分在职的。你给Controller key写了什么?
【解决方案3】:

如果你使用 controlTextDidChange 而不是 textDidChange,你可以摆脱通知的东西,只依靠成为 NSTextField 的代表。

【讨论】:

    【解决方案4】:

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

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

    完美运行。现在我正在尝试简单的方法,但恐怕我对绑定还不够好。

    绑定属性

    @property (retain) IBOutlet NSString *aStringValue;
    

    对于文本字段的值,我必须在 IB 中为“绑定到:”、“控制器键”和“模型键路径”使用什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多