Как я могу привязаться к headerTitle NSTableColumn?

Я хотел бы связать свойство headerTitle NSTableColumn с NSMutableArray на уровне моей модели (через NSArrayController).

В основном я хочу иметь массив, в котором я могу изменять значения и обновлять заголовки заголовков столбцов таблицы. Это разумно?

Однако привязка headerTitle хочет один NSString, и я не уверен, как подключить объект моей модели к этой привязке через мой NSArrayController. Google не дает много хитов для этой проблемы.

Мой уровень модели состоит из двух классов (оба из которых соответствующим образом совместимы с KVC). Первая — это модель, представляющая заголовок одного столбца, она имеет одно свойство title,

// A model class representing the column title of single NSTableColumn
@interface ColumnTitle : NSObject
@property NSString *title;
+ (ColumnTitle*) columnTitleWithTitle:(NSString*) aString;
@end

Второй объект модели, представляющий упорядоченную группу объектов ColumnTitle,

// Class representing an order collection of model items
@interface TableColumnTitles : NSObject
@property NSMutableArray* columnTitles;  // an array of ColumnTitle objects
// These are the KVC array accessors
-(void) insertObject:(ColumnTitle*)columnTitle inColumnTitlesAtIndex:(NSUInteger)index;
- (void)removeObjectFromColumnTitlesAtIndex:(NSUInteger)index;
- (void)replaceObjectInColumnTitlesAtIndex:(NSUInteger)index withObject:(ColumnTitle*)columnTitle;
@end

Обратите внимание, что объект TableColumnTitles реализует указанные выше методы доступа к массиву, необходимые для привязок. Какие-либо предложения?


person Daniel Farrell    schedule 16.02.2014    source источник


Ответы (2)


Не пробовал это раньше, но на самом деле вы просите использовать KVC для индексов массива. Быстрый поиск в Google ничего не дал по этой проблеме, за исключением некоторых результатов, указывающих на то, что это (пока) невозможно (проверьте это)

Самый простой обходной путь, который я мог бы придумать, - это просто добавить специальные свойства для индексов массива... нехорошо, но работает.

Таким образом, для NSMutableArray, называемого myArray и содержащего объекты с title свойствами типа NSString, вы должны сделать что-то вроде:

@property (nonatomic, readonly, getter = columnOneGetter) NSString *columnOneString;

(NSString*) columnOneGetter
{
   return myArray[0].title;
}

Всегда предполагая, конечно, что их количество известно заранее, и мы не говорим о 200 столбцах :-)

person Jay    schedule 16.02.2014
comment
Я только начинаю работать с биндами и не знаю, как реализовать вашу идею. Не могли бы вы объяснить немного подробнее. Кроме того, в целом, как бы вы использовали привязку NSTableColumn headerTitle? Использую ли я его необычным образом? В основном я хочу иметь возможность устанавливать заголовки таблиц, изменяя значения в контроллере массива; это звучит не слишком спорно, но я нигде не могу найти пример того, как это сделать! - person Daniel Farrell; 16.02.2014
comment
Ответ отредактирован соответственно - обычное заявление об отказе от ответственности: введено в браузере, не проверено и не отлажено и т. д. - person Jay; 16.02.2014
comment
Звучит немного странно привязывать текущий выбор к заголовку, по крайней мере, я не могу придумать вариант использования, в котором вы хотели бы изменить заголовок при изменении выбранной строки в таблице. - person Jay; 16.02.2014
comment
На самом деле я не хочу привязываться к выбору, это был просто пример. То, как я написал вопрос, немного сбивает с толку, так что извините за это. В основном я хочу иметь модель NSMutableArray, в которой я могу изменять заголовки заголовков. Вот и все. - person Daniel Farrell; 16.02.2014

Я думаю, что это может быть или не быть тем, что вам нужно, но быстрый поиск в Google привел меня сюда: http://pinkstone.co.uk/how-to-add-touch-events-to-a-uitableviewfooter-or-header/

редактировать: я понимаю, что это для Mac (не ios), но должно быть довольно легко перевести, если это действительно помогает.

person Jonathon Hibbard    schedule 16.02.2014