我正在实现一个-(void) delete :方法,这样我就可以在我的Cocoa应用程序中处理delete键了。我想让它根据选择的内容做不同的事情:对于文本字段,我想要默认的行为(删除左边的字符),但对于NSBrowser项,我想让它删除该项。
我想我应该向窗口请求它的第一个响应器,然后看看这个第一个响应器是否等于我的NSBrowser的指针,但它从来没有匹配过。当我调试它时,我发现firstResponder指向NSBrowserTableView的一个实例,但我在文档中找不到它。
那是什么?
另外,我如何测试我的firstResponder是否是一个特定的tableView?(我想过对NSBrowser进行子类化,但我倾向于避免子类化,我的第二个想法是添加一个标记,但我最喜欢我的第一个方法,前提是当浏览器中的一个项被选中时,firstResponder将指向我的NSBrowser实例。)
有什么想法?
发布于 2010-12-12 01:37:36
您在文档中找不到它,因为它是私有的。我的猜测是,当您实例化NSBrowser或NSTableView时,实际上是实例化了这个私有类的一个子类,这个私有类本身就是NSControl的一个子类(文档中指出它是NSBrowser和NSTableView的超类)。另一个例子是表示为“NSCFString”的NSString,我将其视为暗示CFString和NSString是“免费桥接”的事实。
您可以对此持怀疑态度,但我要深入了解第一个响应者的方法是在代码中插入一条NSLog语句,并在其后面中断,查看日志中打印的内容。您可以设置视图的标记并将其显示在语句中。或者你可以要求你的第一个响应器的类
NSStringFromClass([myFirstResponder class]) 并展示出来。
希望这能帮上忙。
发布于 2011-02-15 01:13:59
实际上,@trudyscousin只是部分正确的。这个类肯定不是,而是NSBrowser的一个子类。
NSBrowserTableView是NSBrowser用来显示每一列的NSTableView的私有子类。使用表视图,以便有一个单独的位置来绘制分支图像(在文件夹旁边绘制的小箭头),而使行的其余部分由默认或用户定义的单元格绘制。
仔细想想,表视图(而不是浏览器)成为第一响应者实际上是有意义的,因为这样活动列的表会首先响应击键,而NSBrowser可以让NSTableView做它已经知道如何做的事情。(例如,跳到与用户键入的字母匹配的第一行。)
幸运的是,NSBrowserTableView有一个指向它工作的浏览器的指针。您可以通过它的-(NSBrowser*)browser方法访问它。我建议您不要在这种特殊情况下继承NSBrowser的子类,因为您必须深入了解它的私有实现才能做任何有用的事情。
https://stackoverflow.com/questions/4414795
复制相似问题