【问题标题】:Validate text in TextField验证 TextField 中的文本
【发布时间】:2011-04-02 07:35:49
【问题描述】:

我的程序中有一个文本字段,它使用绑定表示来自模型对象的文件名。我希望这个 textField 可用于输入新的文件名,并且在用户按下 Enter 后,它应该向我的模型对象发送消息,说明我的 textField 中的 fileName 的值已更改,然后在我的模型对象中检查此类文件名的方法是否可以被称为被使用。如果它返回 true,那么它应该将新值应用于我的模型对象,如果不是,那么我的 textField 中的值应该撤消为初始值。

有人知道如何实现吗?我可以验证我的值,但我不能让我的 textField 刷新为初始值。至于更改模型对象值和 texField 刷新应该使用符合 KVC 的单一方法,我不知道如何实现这种行为。

任何帮助将不胜感激。

【问题讨论】:

  • 检查文件名的方法是检查无效字符还是确保文件名是唯一的?例如,不能重复。
  • 正在检查名称是否唯一...

标签: cocoa binding refresh validation textfield


【解决方案1】:

这对我来说听起来不是一个好的用户体验;作为用户,如果我在文本字段中打了一个简单的错字,我会很沮丧,它会完全删除我刚刚输入的内容。最好更多显示一条消息,指出什么是错误的以及用户如何修复它。不过……

我认为您应该设置一个文本字段委托。让委托保留一个变量,其中包含输入的最后一个有效字符串。然后在textFieldShouldEndEditing: 中检查有效性,如果检查未通过,则将文本字段的值设置为该变量并返回 NO。如果确实通过了,则更改变量以保存新的有效字符串并返回 YES。

【讨论】:

  • 您对显示错误消息是正确的,但这是细节。我不知道如何将此检查放入绑定中。关于委托的想法听起来不错,但我对它们不太熟悉。实际上来自 textField 的值绑定到数组中的对象,因此 textField 绑定到 arrayController.selection.fileName。使用委托让我以编程方式协调我的绑定,我理解正确吗?
  • 将委托方法与绑定结合起来应该没有任何问题。通常,委托方法是稍微自定义类(通常是 UI 元素)的行为的方法,而不必为子类化而烦恼。这个想法是,对象向其委托请求许可或对各种操作的反馈,例如,如果输入无用,您可以阻止用户跳出文本字段。
  • 听起来很有趣。我将研究更多关于代表使用它的信息。谢谢你的帮助...
  • 没问题,祝你好运!顺便说一句,Apple 的概念文档有一个writeup about delegates
猜你喜欢
  • 2020-01-02
  • 2011-03-13
  • 1970-01-01
  • 2021-08-30
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
相关资源
最近更新 更多