我正在实现-(void)delete:方法,以便可以在Cocoa应用程序中处理Delete键。我希望它根据选择的内容执行不同的操作:对于文本字段,我希望使用默认行为(将char移到左侧),但是对于NSBrowser项,我希望它删除该项。

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

它是什么?

我还可以如何测试firstResponder是否是特定的tableView? (我想到了子类化NSBrowser,但是我倾向于避免子类化,而我的第二个想法是添加一个标签,但是如果浏览器中的某个项目位于其中,则只有firstResponder会指向我的NSBrowser实例,那么我最喜欢我的第一种方法已选中。)

有什么想法吗?

最佳答案

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

随心所欲地添加许多盐,但是我要深入了解第一个响应者的方法是在代码中插入NSLog语句,然后打破它,然后查看日志中打印的内容。您可以设置视图的标记并将其显示在语句中。或者您可以要求您的第一个响应者上课

NSStringFromClass([myFirstResponder class])


并显示出来。

希望这会有所帮助。

关于cocoa - 与NSBrowser相比,NSBrowserTableView是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4414795/

10-10 20:34