c# - cocoa 的属性网格

标签 c# objective-c cocoa reflection propertygrid

我在Cocoa中没有找到任何类似于.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]];
}

使用基本 KVO 与 reflectedObject 同步更新:

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

此解决方案有效,但我有两个问题需要解决:

  1. 我需要以某种方式模拟 .NET 属性,以便我可以为属性选择正确的编辑器。 文本框并不适合所有情况。
  2. 每行都有不同的单元格编辑器,例如 bool 值复选框、字符串文本框等。

我还是 Cocoa 的初学者,如果我要求一些非常基本的东西,我很抱歉。

更新:我需要这样的东西(图片来自 Xcode->获取信息->构建):

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

最佳答案

Cocoa 的框架中没有内置这样的 View 。如果没有其他人创建一个并将其作为开源发布,您将需要从头开始创建一个。

手工制作与底层模型相匹配的 UI 可能更容易。

关于c# - cocoa 的属性网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079044/

相关文章:

objective-c - NSTableView 的默认键盘事件

cocoa - 在辅助屏幕上显示 NSWindow

c# - 是否可以保护 appSettings 部分中的单个元素而不是整个部分?

c# - 如何使用ConfigurationManager解析app.config?

ios - 如何在UITableViewCell中通过点击按钮实现UITableViewCell选择的效果?

ios - 在 Xcode 中得到预期的类型

objective-c - 如何读取字符串直到找到所选字符串?

c# - 忽略 if 语句的设置函数 - 如果输入小于或等于 0,则应返回 0

c# - 格式小数

objective-c - 将 NSImageView 中点击的 NSPoint 转换为更正底层 NSBitmapImageRep 中的像素坐标