Я не нашел ничего похожего на класс .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];
Это решение работает, но у меня есть две проблемы, которые мне нужно исправить:
- Мне нужно как-то смоделировать атрибуты .NET, чтобы я мог выбрать правильный редактор для свойства.
Текстовые поля подходят не для всех ситуаций.
- Различный редактор ячеек для каждой строки, поэтому для логических флажков, для текстовых полей строк и т. Д.
Я все еще новичок в Какао, так что извините, если я прошу что-то действительно простое.
ОБНОВЛЕНИЕ: Мне нужно что-то вроде этого (картинка из Xcode-> Get Info-> Build):
PropertyGridCocoa http://www.adorior.cz/Images/PropertyGridCocoa.png