与NSBrowser相比,什么是NSBrowserTableView?

时间:2010-12-11 02:03:51

标签: cocoa nsbrowser

我正在实现一个 - (void)delete:方法,所以我可以在我的Cocoa应用程序中处理删除键。我希望它根据所选内容做不同的事情:对于文本字段,我想要默认行为(删除左边的字符),但对于NSBrowser项目,我希望它删除该项目。

我以为我会问Window是第一个响应者,然后看看第一个响应者是否等于我的NSBrowser的指针,但它从未匹配过。当我调试它时,我发现firstResponder指向NSBrowserTableView的一个实例,但我在文档中找不到它。

这是什么?

我还能怎样测试我的firstResponder是否是特定的tableView? (我想继承NSBrowser,但我倾向于避免子类化,我的第二个想法是添加一个标签,但我最喜欢我的第一个方法,如果只有firstResponder指向我的NSBrowser实例,当浏览器中的一个项目是选中。)

思想?

2 个答案:

答案 0 :(得分:4)

实际上,@ uldyscousin只是部分正确。这个类绝对不是 NSBrowser的子类。

NSBrowserTableView是NSTableView用于显示每列的NSBrowser的私有子类。使用表格视图,因此有一个单独的位置来绘制分支图像(文件夹旁边的小箭头),同时保留行的其余部分由默认或用户定义的单元格绘制。

如果你考虑一下,实际上表视图(而不是浏览器)是第一个响应者是有意义的,因为活动列的表首先得到响应键击的破解,NSBrowser可以让NSTableView做它已经知道如何。 (例如,跳转到与用户键入的字母匹配的第一行。)

幸运的是,NSBrowserTableView有一个指针,指向它适用的浏览器。您可以通过-(NSBrowser*)browser方法访问它。我建议你不要为这个特殊情况继承NSBrowser,因为你必须深入了解它的私有实现才能做任何有用的事情。

答案 1 :(得分:-1)

您在文档中找不到它,因为它是私有的。我的猜测是,当你实例化一个NSBrowser或一个NSTableView时,你实际上是在实例化这个私有类的子类,它本身就是NSControl的子类(在文档中指出 是NSBrowser和NSTableView的超类)。另一个例子是NSString表示为'NSCFString',我认为这是因为CFString和NSString是“免费桥接的”。

根据你的意愿拿出尽可能多的盐,但是我开始深入了解第一个响应者的方法是在我的代码中插入一个NSLog语句并突破它,看看日志中打印的是什么。您可以设置视图的标记并在语句中显示该标记。或者你可以要求你的第一个转发者的课程

NSStringFromClass([myFirstResponder class]) 

并显示。

希望这会有所帮助。