Фильтрация одностолбцового NSTableView с помощью NSArrayController

Я представляю лист с NSTableView (один столбец), NSSearchField и NSButton ("Добавить"). Я хочу установить содержимое табличного представления в список строк. Этот список строк находится в NSArray названном списке. Этот контент следует фильтровать на основе содержимого поля поиска (если строка в списке) не содержит содержимого поля поиска, она больше не отображается в виде таблицы.

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


person Fatso    schedule 02.01.2013    source источник


Ответы (1)


Я загрузил проект, пожалуйста, проверьте.

Примерное представление о том, как это сделать, выглядит следующим образом: (однако понять легче, увидев проект)

  1. Создайте контроллер массива.

  2. Набор для объекта контроллера массива

      Mode:Class
    
      Class Name: Your custom Class
    
  3. Полученные действия

      add: to the button that will add new objects, typically labelled with +
    
      remove:to the button that will add new objects., typically labelled with -
    
  4. Ссылки на привязки (либо из таблицы, либо отсюда для каждого столбца таблицы).

  5. Для поля поиска

     Bindings, Predicate to Array Controller
    
     ControllerKey : filterPredicate
    
     Predicate Format : <class property> contains $value
    
     (if to search in multiple table columns  then <class property 1> contains $value || <class property 2> contains $value etc…. )
    
person Anoop Vaidya    schedule 02.01.2013
comment
Прекрасно работает! Просто вопрос: возможно ли это сделать без пользовательского класса? Было бы глупо создавать целый класс, который имеет только одну NSString в качестве переменной экземпляра. На данный момент я использую -setContent: в контроллере массива, но я не уверен, как связать его значения с табличным представлением и всем остальным. - person Fatso; 02.01.2013
comment
Неважно! Я нашел свой старый код и привязывал содержимое табличного представления вместо привязки значения столбца. Спасибо за помощь! - person Fatso; 02.01.2013
comment
Запомните его название: Контроллер массива, а не контроллер строк... Надеюсь, вы получили ответ: p - person Anoop Vaidya; 02.01.2013
comment
Если вам нужна только строка, просто create a property of type string. В arrayController установите clasName, который содержит строку. Для таблицы измените привязку к этой строке. Сделайте то же самое с панелью поиска... вот и все. Он будет работать без создания нового класса, имеющего только одну строку. - person Anoop Vaidya; 02.01.2013
comment
На самом деле работает просто использование self вместо свойства класса! Спасибо за очень четкий ответ!!! - person Fatso; 02.01.2013
comment
@AnoopVaidya Привет, NSArrayController работает только с массивом словарей? - person Just a coder; 25.10.2013
comment
@Jai: НЕТ, это может работать с любой коллекцией. Но в основном мы используем с Array и Dictionary. - person Anoop Vaidya; 25.10.2013
comment
В моем случае ввод простого ‹свойства класса› не сработал, но сработало self.‹свойство класса›. - person insys; 31.01.2014