Отображение индекса строки в NSTableView связало с NSArrayController

У меня есть NSTableView, который связывается с NSArrayController. Я хотел бы иметь один из столбцов таблицы, показывающих индекс строки таблицы. Это достаточно легко сделать, когда Вы реализуете NSTableDataSource сами, но я не могу понять это со связанным табличным представлением. Я предполагаю, что здесь ищу что-то как @count ключевой путь, который дает мне количество arrangedObjects (который является @index), но это, очевидно, отсутствует.

Два разъяснения:

  1. Индекс, который показывают в каждой строке, является индексом той строки и не связанный вообще со способом, которым данные на самом деле расположены в образцовом или контроллере массива. Например, если целые данные являются 10 000 объектов затем, индексы должны пойти от 1 до 10 000, если пользователь вводит критерий поиска, и таблица показывает только 4 из объектов затем, числа должны пойти от 1 до 4, даже если показанные объекты на самом деле со всех концов исходного массива.
  2. Мне нужно это, потому что меня попросили сделать это клиентом :-). Клиенту нужен способ смочь оценить количество строк прежде или после определенной строки. Привет мог бы, например, хотеть знать, сколько строк было добавлено.
6
задан Eyal Redler 2 January 2010 в 20:13
поделиться

2 ответа

Как я понимаю, можно было бы не привязывать этот столбец таблицы, а использовать источник данных. Я вспоминаю, что NSTableView поддерживает подобную операцию "двойного режима", но не могу найти документов, подтверждающих это.

.
4
ответ дан 17 December 2019 в 00:10
поделиться

Предполагая, что вы ставите перед собой цель воспроизвести поведение iTunes, ваш столбец должен отображать только от 1 до (количество видимых строк). На самом деле, это вовсе не обязательно должно быть связано с вашей моделью.

Итак, дайте контроллеру свойство динамически генерируемого массива и сделайте его зависимым от массива реальных объектов модели.

Для этого свойства реализуйте методы доступа к массиву - методы доступа к массиву, с проиндексированным геттером просто вычисляя idx + 1, box и возвращая этот объект. Также может понадобиться реализовать геттер целого массива, чтобы удовлетворить KVC.

Убедитесь, что столбец установлен как нередактируемый, а привязка установлена не условно включенной . В противном случае, вы получите исключение (за то, что у вас не будет setters для этого свойства), когда пользователь попытается ввести новый индекс для строки.

Одно замечание предостережение: Это может вызвать проблемы, так как NSTableView не ожидает, что его столбцы будут привязаны к дискретным массивам; он ожидает, что все его столбцы будут привязаны к различным свойствам объектов модели в одном массиве. Может потребоваться привязка содержимого самого представления таблицы к вашему массиву объектов модели, в дополнение к привязке содержимого столбцов, и я сталкивался с этим раньше .

.
1
ответ дан 17 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: