你将如何子类NSOutlineView?子类化NSOutlineView
回答
首先,你子类的对象之前,你应该问自己“我需要这样做吗?”。子类化是交互和扩展其他类的功能的一种更复杂的方式,所以你应该确保你想要实现的内容不能通过另一个更简单的方法,例如委托,通知等来轻易实现。显然,如果你尝试要改变控件的外观,这将通过子类化更容易完成,但要确保检查所有其他可用选项。请记住,NSOutlineView
有一个相当长的对象树 - 它继承自NSTableView
,它继承自NSControl
,它继承自NSView
,继承自,它继承自NSObject
,并且存在各种类型的辅助方法帮助你实现你想要的。
但是,如果您检查所有这些选项并决定子类NSOutlineView
,这取决于您想要对您的子类执行什么操作。创建子类的shell的最简单方法是选择File > New File
,然后选择Objective-C class
,就像使用任何其他类一样,它将创建一个具有头文件和实现文件的新类,该类继承自NSObject
。然后,你可以简单地改变行头文件:
@interface MyClass : NSObject { // Where MyClass is the name of your class
到
@interface MyClass : NSOutlineView {
这将导致你的类从NSOutlineView
继承。由于它是NSOutlineView
的子类,因此可以为您提供很多机会来更改控件的默认行为。
因为要创建一个子类,您可以更改任何方法了对象树的默认实现 - 也就是说,你可以覆盖NSOutlineView
宣布,NSTableView
NSControl
NSView
,NSResponder
和NSObject
方法,(虽然你应该很少覆盖在NSObject
中声明的方法)。你不需要在你的头文件中重新定义方法签名,你可以通过在你的子类的实现中实现它来覆盖函数。例如,如果你想覆盖的NSView
drawRect:
方法,你会做以下的子类的实现:
- (void)drawRect:(NSRect)rect //Method signature from the docs
{
//Code here
}
当drawRect:
是在你的类调用,你的代码会被执行,而不是在NSView
代码。
你也可以通过方法调用你不想处理的方法。这是默认完成的,所以您不需要创建空方法,只需调用super
上的方法,但是,如果您重写某个方法并希望允许其中一个超类先处理它,则可以执行以下操作:
- (void)expandItem:(id)item
{
[super expandItem:item];
//Your code here
}
例如,如果您想更改类中的某个变量,这将是有益的,但通过首先将该方法调用到树上来提供方法的默认实现。
子类化可以是一个相当复杂的过程,特别是对于像控件这样的复杂对象,虽然它可能非常有用和强大。
@interface MyOutlineView : NSOutlineView { ... } ... @end
哦,我明白了,我会在什么地方放点? – Joshua 2009-06-14 07:56:50
- 1. 通知时NSOutlineView子含量的变化
- 2. 将NSProgressIndicators添加到NSOutlineView子类
- 3. NSOutlineView没有做它应该做的它的子类
- 4. PyQt子类化
- 5. 子类化nssegmentedcontrol?
- 6. ActiveRecord子类化?
- 7. RKObject子类化
- 8. 子类化UIWindow
- 9. 子类化datetime64
- 10. 子类化Slick.Grid
- 11. 子类化QGraphicsLayoutItem
- 12. 子类化IASKAppSettingsViewController
- 13. 子类化NSCalendar?
- 14. 用NSTreeController过滤NSOutlineView的孩子
- 15. NSOutlineView outlineViewSelectionDidChange
- 16. UIAlertView的子类化
- 17. 子类化控制
- 18. TDataset子类化:InternalRefresh
- 19. scipy.stats.rv_continuous的子类化
- 20. 实施NSOutlineView /每
- 21. NSOutlineView选择父
- 22. NSOutlineview自定义
- 23. NSOutlineView问题与
- 24. NSOutlineView数据源
- 25. NSOutLineView嵌套NSArray
- 26. 过滤NSOutlineView/NSTreeController
- 27. NSOutlineView,NSTreeController和willDisplayCell
- 28. NSOutlineView不重绘
- 29. C++子类参数化类,并使用子类作为一个专业化
- 30. 子类化QMessageBox静态API
简短的回答是:你用同样的方法子类化任何对象。你应该尝试更具体的问题。苹果的文档涵盖了子类,所以我们必须假设你已经阅读并尝试了一些东西然后被卡住了。你卡在哪里? – 2009-06-14 08:46:36
对不起,我没有阅读所有关于子类的Apple文档。 – Joshua 2009-06-14 13:54:22