Не можете связать NSSlider в IB? - PullRequest
1 голос
/ 16 июня 2010

Я только что создал новый проект XCode. В заголовочном файле класса AppControl у меня определены следующие объекты (и некоторые другие тоже):

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

После помещения базового кода в файлы .h и .m я пошел в Interface Builder и создал свой пользовательский интерфейс. Мне удалось связать два элемента управления NSImageView в IB с соответствующими объектами NSImageView, перечисленными выше. И я также смог связать несколько других объектов / элементов управления. Но я НЕ могу связать два последних элемента (myNoiseLevel и mySharpness) с элементами управления NSSlider, которые есть в главном окне приложения. Я не уверен почему. Я знаю, что такие вещи, вероятно, трудно диагностировать, потому что они не «строго связаны с кодом», но если есть что-то «хитрое» в связывании ползунков, пожалуйста, дайте мне знать, какие основные «подозрения» следует проверять.

Это моя первая попытка использовать ползунок через IB. У меня есть книга («Какао-программирование для Mac OS X», 3-е изд., А. Хиллегасс), которую я использую, чтобы узнать об основных способах выполнения этой вещи. И у него есть пример слайдера там. Но его пример слайдера "непрерывный" и использует привязку к ключевому пути. Я думаю, что это излишне для того, что я хочу / нужно сделать - я просто хочу извлечь значение из ползунка, когда нажата другая кнопка (нет необходимости в «постоянном» обновлении). Поэтому я пытаюсь напрямую связать перечисленные «розетки», когда я щелкаю правой кнопкой мыши по своему объекту управления приложениями (по одному для каждого из этих элементов, показанных выше), с ползунками в моем окне. Но когда я перетаскиваю cntl из розетки AppControl до соответствующего ползунка, ползунок не «принимает» перетаскиваемую стрелку.

Имеет ли это смысл? Есть идеи, что я делаю неправильно и / или что мне нужно сделать, чтобы привязка работала? Я попытался сохранить / построить / закрыть и открыть IB и Xcode - все, чтобы убедиться, что IB имеет последнюю версию всего. Тем не менее, все же не повезло.

И последнее. Что мне действительно нужно, так это числа CGFloat с ползунка. Могу ли я просто объявить Outlet как тип CGFloat ... или мне нужно определить его как NSTextField (или что-то еще), а затем преобразовать его в Float в моей программе? Вы можете видеть в IBOutlets, который я вставил выше, что я пробовал разные типы данных для выходов (пытаясь понять, было ли мое определение их как CGFloat каким-то образом предотвращать привязки).

1 Ответ

0 голосов
/ 16 июня 2010

Сделать розетку NSSlider*.После этого вы сможете подключиться к нему.Когда вам нужно значение (например, в ответ на нажатие кнопки, которое вы упомянули), вызовите [yourSliderOutletName doubleValue].

В более общем смысле: IBOutlet - это ивар, который может быть заполнен указателем на фактический объект , пробуждаемый из файла NIB.Как таковой, он должен иметь соответствующий тип для хранения этого указателя - фактический класс объекта или один из его суперклассов или протоколов, или (наименее информативно) id.Вы не можете просто произвольно соединить объект с любой старой переменной, например, с CGFloat.Там нет неявного преобразования - как система должна знать, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...