cocoa - 在 Cocoa 中操作 UI 元素的最佳实践

标签 cocoa user-interface xcode4.2

首先我要说的是,我是 cocoa 开发的新手。我也很惊讶我还没有找到关于此的帖子,但我现在已经过滤了许多帖子但没有成功。

我有一组元素,它们应该根据长时间运行的算法的状态更改状态。

基本上,我有一个开始按钮、一个取消按钮和一个下一步按钮。应用程序的初始状态将是“开始”按钮启用、“取消”和“下一步”按钮禁用。随着算法的进展,算法的状态应在所有按钮上交换启用/禁用状态。

我见过的每个操作按钮状态的选项都涉及将button.enabled编码到 Controller 代码中。当我深入研究 Cocoa 时,我有 ASP .NET MVC 背景,这对我来说似乎是一种倒退。 MVC 模式中 View 逻辑和 Controller 逻辑不应该分离吗?

对我来说,似乎我应该能够发出几个 bool 值作为 IBOutlet,例如算法运行和算法成功,并在 View 层绑定(bind)按钮状态。我需要放弃这个想法吗?或者我可能遗漏了一些关于 Cocoa 版本的设计模式的信息(比如我将 View 绑定(bind)到的对象实际上应该是一个 View 模型,它与 Controller 类交互)?或者,最后,有没有一种简单的方法来完成我正在谈论的事情,而我只是错过了它。

最佳答案

您不需要将按钮的启用状态编码到 Controller 中。您可以做的是在 Controller 上声明一个 BOOL 属性,例如 isBusy,然后在开始长时间操作时将此属性设置为 YES 并完成后为NO。您必须使用 Key-Value Coding 来执行此操作- 兼容方法,这本质上意味着使用 setter,因此您可以调用 self.isBusy = YES;,例如。

您这样做的原因是因为您可以使用 Cocoa Bindings在 UI 控件上设置绑定(bind)。进入其中一个按钮的绑定(bind)检查器,并使用 isBusy 键路径将 Enabled 绑定(bind)绑定(bind)到您的 Controller 对象。

Cocoa 绑定(bind)使用 Key-Value Observing (KVO)来监控观察到的属性的值。当 isBusy 属性发生更改时,绑定(bind)到该属性的按钮将注意到并更改其 enabled 状态作为响应。

关于cocoa - 在 Cocoa 中操作 UI 元素的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9103978/

相关文章:

cocoa - 将文件拖放到 NSOutlineView 中

swift - 在多个屏幕上排列按钮

matlab - 如何在 MATLAB 的应用程序设计器中使用 'waitfor' 或 'uiwait'?

objective-c - 如何将图像编码为字符串格式?

objective-c - 在 ctrl-click/右键单击 NSTableView 的标题上显示上下文菜单

iphone - nsfetchedresultscontroller 中部分名称键路径的无关系值

Java GUI 使用一个按钮将多个文本字段添加到文本文件?

iphone - 应用程序关闭时如何从后端发送电子邮件?

iphone - 在 Xcode 4.2 中启用崩溃日志符号化

objective-c - 这是 Objective-C 内存泄漏吗?