无法在IB中绑定NSSlider?
我刚创建了一个新的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编写),我正在使用这本书来了解执行此操作的基本方法。 在那里他有一个滑块示例。 但他的滑块示例是“连续的”,它使用关键路径绑定。 我认为这对我想要/需要做的事情有点矫枉过正 - 我只是想在推入另一个按钮时(不需要“连续”更新)从滑块中获取值。 所以我试图直接绑定列出的“插座”,当我右键单击我的应用程序控制对象(上面显示的每个项目都有一个)时,我的窗口上的滑块控件。 但是当我从AppControl出口缓慢拖动到相应的滑块时,滑块不会“接受”我正在拖动的箭头。
这有意义吗? 任何想法我做错了什么和/或我需要做什么来使绑定工作? 我曾尝试保存/建立/关闭并重新打开IB和Xcode - 所有这些都确保IB拥有最新版本的所有内容。 尽管如此,仍然没有运气。
最后一件事......我真正需要的是来自滑块的CGFloat数字。 我可以简单地将Outlet声明为CGFloat类型...还是需要将它定义为NSTextField(或其他),然后在我的程序中将其转换为Float? 您可以在上面粘贴的IBOutlets中看到,我试图为插座尝试不同的数据类型(试图查看我将它们定义为CGFloat是否以某种方式阻止了绑定)。
使插座成为NSSlider*
。 您应该能够连接到它。 当你需要这个值时(例如,按下你提到的按钮)调用[yourSliderOutletName doubleValue]
。
更一般地说:一个IBOutlet
是一个ivar,可以用一个指向从NIB文件唤醒的实际对象的指针来填充。 因此,它需要是适当的类型来保存该指针 - 对象的实际类,或其超类或协议之一,或(至少信息) id
。 您不能随意将对象连接到任何旧变量,如CGFloat
。 没有隐含的转换 - 系统应该如何知道你想要什么?