Привязка к NSComboBox

Я новичок в Cocoa и разрабатываю одно обычное настольное приложение Cocoa в Xcode 4.5. У меня есть требование отображать значения в NSComboBox, и я должен получить из NSComboBox, но ограничение состоит в том, что я не должен делать привязки к IBOutlet.

Если мы хотим, чтобы нам нужно было использовать контроллеры массива, мы можем использовать NSArrayControllers, но не IBOutlets.

Кто-нибудь предложит мне, как выполнить эту задачу без использования IBOutlets.

Я не хочу использовать IBOutlets из-за:

  1. Это уменьшает код: предположим, что у нас есть 15 текстовых полей в пользовательском интерфейсе, поэтому вам нужно иметь 15 IBOutlets (если вы работаете над небольшим проектом, вы можете иметь его, но когда мы реализуем проект большего размера, вы можете в конечном итоге создать тонны IBOutlets, который не делает ничего, кроме помощи в доступе к значению из текстовых полей.

    Если вы используете привязку, а не IBOutlet, обработка пользовательского интерфейса проста. Предположим, у вас есть одна таблица со связанным arrayController. Когда массив изменен, который вы связали с контроллером массива, автоматически изменения отразятся в tableView, вам не нужно беспокоиться об обновлении tabelView, если мы используем IBOutlet, нам придется выцарапать голову, чтобы обновить содержимое. Всякий раз, когда данные изменяются, которые мы отображаем в tableView.

  2. Облегчает жизнь разработчика: если мы используем привязки, любые изменения, происходящие в объекте привязки, немедленно отражаются в пользовательском интерфейсе, нам не нужно беспокоиться об обновлении пользовательского интерфейса.

  3. Простой для понимания код: если мы используем IBOutlets без необходимости, мы в конечном итоге напишем код для обработки представлений, обновления представлений и т. д., если мы используем привязки автоматически, он обновляется.

По мне. Хорошая практика, если мы используем привязки.

IBOutlets просто увеличивают длину кода.

Заранее спасибо...


person user2118335    schedule 04.03.2013    source источник
comment
где получить значение в текстовом поле?   -  person Anoop Vaidya    schedule 04.03.2013


Ответы (2)


Шаги, как связать:

  1. Нарисуйте NSComboBox и NSTextField, которые будут привязаны к полю со списком.

  2. В поле со списком добавьте элементы из Interface Builder.

  3. Выберите Поле со списком. Удерживая Ctrl, перетащите его к NStextField/label и выберите takeStringValueFrom.

Вот и все!!!

Теперь вы можете создать и запустить и проверить, что изменения выбора в поле со списком также видны в текстовом поле.

person Anoop Vaidya    schedule 04.03.2013
comment
Но для этого мы должны скрыть эту метку или текстовое поле от пользователя для отображения, нет ли другого способа получить решение моей проблемы? - person user2118335; 04.03.2013
comment
Мое требование: у меня есть 2 поля со списком. На основе значений первого поля со списком должны быть загружены значения второго списка. - person user2118335; 04.03.2013

Вам нужно настроить делегат поля со списком для обработки метода comboBoxSelectionDidChange.

http://www.cocoabuilder.com/archive/cocoa/221619-detecting-when-nscombobox-text-changed-by-list.html

person basawyer    schedule 05.03.2013