gpt4 book ai didi

cocoa - IB中无法绑定(bind)NSSlider?

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

我刚刚创建了一个新的 Xcode 项目。在 AppControl 类头文件中,我定义了以下对象(以及其他一些对象):

    IBOutlet NSImageView *inputImageView;
IBOutlet NSImageView *outputImageView;
IBOutlet NSTextField *myNoiseLevel;
IBOutlet CGFloat *mySharpness;

将基本代码放入 .h 和 .m 文件后,我进入 Interface Builder 并创建我的 UI。我能够将 IB 中的两个 NSImageView 控件绑定(bind)到上面列出的相应 NSImageView 对象。我还能够绑定(bind)其他几个对象/控件。但我无法将列出的最后两项(myNoiseLevel 和 mySharpness)绑定(bind)到应用程序主窗口上的 NSSlider 控件。我不知道为什么。我知道这种事情可能很难诊断,因为它不是“严格与代码相关”,但如果绑定(bind) slider 有一些“棘手”的事情,请让我知道我应该检查的主要“嫌疑人”是什么。

这是我第一次尝试通过 IB 使用 slider 控件。我有一本书(Mac OS X 的 Cocoa 编程,第三版,作者:A. Hillegass),我用它来学习做这些事情的基本方法。他在那里有一个 slider 示例。但他的 slider 示例是“连续的”,并且使用关键路径绑定(bind)。我认为这对于我想要/需要做的事情来说太过分了——我只想在按下另一个按钮时从 slider 中提取值(不需要“连续”更新)。因此,我尝试将右键单击应用程序控制对象(上面显示的每个项目一个)时列出的“ socket ”直接绑定(bind)到窗口上的 slider 控件。但是,当我从 AppControl 导出 cntl 拖动到相应的 slider 时, slider 将不会“接受”我正在拖动的箭头。

这有道理吗?知道我做错了什么和/或我需要做什么才能使绑定(bind)工作吗?我尝试过保存/构建/关闭并重新打开 IB 和 Xcode——所有这些都是为了确保 IB 拥有所有内容的最新版本。但仍然没有运气。

最后一件事...我真正需要的是 slider 中的 CGFloat 数字。我可以简单地将 Outlet 声明为 CGFloat 类型...还是需要将其定义为 NSTextField (或其他类型),然后在程序中将其转换为 Float ?您可以在我上面粘贴的 IBOutlet 中看到,我正在为导出尝试不同的数据类型(尝试查看我将它们定义为 CGFloat 是否以某种方式阻止了绑定(bind))。

最佳答案

将 socket 设为 NSSlider*。然后您应该能够连接到它。当您需要该值时(例如,响应您提到的按钮按下),请调用 [yourSliderOutletName doubleValue]

更一般地说:IBOutlet 是一个 ivar,可以用指向从 NIB 文件唤醒的实际对象的指针填充。因此,它需要具有适当的类型来保存该指针 - 对象的实际类,或其父类(super class)或协议(protocol)之一,或(至少提供信息)id。您不能随意将对象连接到任何旧变量,例如 CGFloat。没有隐式转换——系统如何知道你想要什么?

关于cocoa - IB中无法绑定(bind)NSSlider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3049493/

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