gpt4 book ai didi

objective-c - 如何判断用户更改了 cocoa 中控件的值

转载 作者:行者123 更新时间:2023-12-03 17:40:43 25 4
gpt4 key购买 nike

我有一个带有一堆 NSTextFields、日期选择器和 NSPopupButton 的表单。我想仅在用户更改了这些控件的值时才提供保存功能。那么如何追踪 cocoa 的变化呢?我考虑使用键值观察来分析每个控件的值属性,但是它会触发以编程方式分配的值(例如默认值)的通知。那么有什么想法如何处理这种情况?

最佳答案

对于您的文本字段,使您的窗口或 View Controller 成为字段的委托(delegate),然后实现 -controlTextDidChange:,并在其中启用保存。如果您需要根据编辑的文本字段采取不同的操作,您可以从传入的通知对象中检索它。

NSPopupButtons 是按钮,因此它们使用 target:action 模式。在 Controller 中实现 IBAction 方法,然后将弹出按钮连接到它。如果您对每个弹出按钮执行相同的操作,则可以对多个弹出按钮使用相同的操作方法(例如,只需启用保存按钮和/或菜单项)。

在为控件设置默认值时,您可能仍然会收到虚假通知,具体取决于您的操作方式。如果是这样,只需向 Controller 添加一个名为 changeTrackingDisabled 或类似名称的 BOOL 属性即可。设置默认值时将其设置为"is"(或恢复到上次保存的状态),完成后将其设置回“否”。然后在每个注意到更改的方法中,检查该属性的状态。

我个人认为在这种情况下使用委托(delegate)和操作是比 KVO 更有效的方法。 KVO 的 API leaves something to be desired ,并且往往会增加组件之间的耦合,因为您必须使用字符串对希望观察的所有属性的路径进行静态编码。 This blog post对优缺点进行了精彩、深入的讨论。

关于objective-c - 如何判断用户更改了 cocoa 中控件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com