Сетка собственности для какао - PullRequest
0 голосов
/ 17 января 2010

Я не нашел ничего похожего на класс .NET PropertyGrid в Какао, поэтому я начал писать свою собственную версию. Я использую информацию из среды выполнения, чтобы получить свойства объекта:

Class reflectedClass = [reflectedObject class];
uint propertyCount = 0U;
objc_property_t *properties = class_copyPropertyList(reflectedClass, 
                                                     &propertyCount);

И это для получения / установки значений в NSTableView:

- (NSString *)propertyNameAtIndex:(int)index
{
    return (NSString *)[cachedPropertyNames objectAtIndex:index];
}

- (id)propertyValueAtIndex:(int)index
{
    return [reflectedObject valueForKey:[self propertyNameAtIndex:index]];
}

- (void)setPropertyValue:(id)value atIndex:(int)index
{
    [reflectedObject setValue:value forKey:[self propertyNameAtIndex:index]];
}

Для синхронизации обновлений с reflectedObject используется базовый КВО:

[reflectedObject addObserver:self
                  forKeyPath:propertyName
                     options:NSKeyValueObservingOptionOld | 
                             NSKeyValueObservingOptionNew
                     context:NULL];

Это решение работает, но у меня есть две проблемы, которые мне нужно исправить:

  1. Мне нужно как-то смоделировать атрибуты .NET, чтобы я мог выбрать правильный редактор для свойства. Текстовые поля подходят не для всех ситуаций.
  2. Различный редактор ячеек для каждой строки, поэтому для логических флажков, для текстовых полей строк и т. Д.

Я все еще новичок в Какао, так что извините, если я прошу что-то действительно простое.

ОБНОВЛЕНИЕ: Мне нужно что-то вроде этого (картинка из Xcode-> Get Info-> Build):

PropertyGridCocoa http://www.adorior.cz/Images/PropertyGridCocoa.png

1 Ответ

1 голос
/ 17 января 2010

Какао не имеет такого представления, встроенного в структуру. Если никто другой не создал его и не выпустил как открытый исходный код, вам нужно будет создать его с нуля.

Вероятно, проще создать пользовательский интерфейс, соответствующий базовой модели.

...