IB中无法绑定NSSlider?

时间:2010-06-15 22:22:03

标签: cocoa xcode interface-builder

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

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

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

这是我第一次尝试通过IB使用滑块控件。我有一本书(Mac OS X的Cocoa编程,第三版,由A. Hillegass编写),我用它来了解这些东西的基本方法。他有一个滑块示例。但他的滑块示例是“连续的”,它使用键路径绑定。我认为这对于我想要/需要做的事情来说太过分了 - 我只想在按下另一个按钮时从滑块中拉出值(不需要“连续”更新)。所以当我右键单击我的App Control对象(上面显示的每个项目对应一个)到我窗口上的滑块控件时,我试图直接绑定列出的“outlet”。但是当我从AppControl插座向上拖动到相应的滑块时,滑块将不会“接受”我正在拖动的箭头。

这有意义吗?知道我做错了什么和/或我需要做些什么来使绑定工作?我试过保存/建立/关闭&重新开放IB和Xcode - 所有这些都是为了确保IB拥有最新版本的一切。但是,仍然没有运气。

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

1 个答案:

答案 0 :(得分:0)

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

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