簡體   English   中英

無法在IB中綁定NSSlider?

[英]Cannot bind NSSlider in IB?

我剛剛創建了一個新的Xcode項目。 在AppControl類的Header文件中,我定義了以下對象(還有一些其他對象):

    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對象(上面顯示的每個項目之一)時,我嘗試將列出的“插座”直接綁定到窗口上的滑塊控件。 但是,當我從AppControl插座中拖拽到相應的滑塊時,該滑塊將不會“接受”我拖動的箭頭。

這有意義嗎? 知道我做錯了什么和/或需要做些什么才能使綁定起作用嗎? 我已嘗試保存/構建/關閉並重新打開IB和Xcode,以確保IB具有所有內容的最新版本。 不過還是沒有運氣。

最后一件事……我真正需要的是來自滑塊的CGFloat數字。 我可以簡單地將Outlet聲明為CGFloat類型嗎?還是需要將其定義為NSTextField(或其他),然后在程序中將其轉換為Float? 您可以在上面粘貼的IBOutlets中看到,我正在為出口嘗試不同的數據類型(試圖查看將它們定義為CGFloat是否以某種方式阻止了綁定)。

將插座設為NSSlider* 然后,您應該可以連接到它。 當您需要該值時(例如,響應您按下按鈕時提及),請調用[yourSliderOutletName doubleValue]

更一般而言: IBOutlet是一個ivar,可以使用指向從NIB文件中喚醒的實際對象的指針來填充。 因此,它必須具有合適的類型來保存該指針-對象的實際類,其超類或協議之一或id (至少提供信息)。 您不能隨便將一個對象連接到任何舊變量,例如CGFloat 沒有隱式轉換-系統應該如何知道您想要什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM