你將如何子類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. NSTableRowView的子類NSOutlineView
- 2. 通知時NSOutlineView子含量的變化
- 3. 將NSProgressIndicators添加到NSOutlineView子類
- 4. NSOutlineView沒有做它應該做的它的子類
- 5. 子類化NSStream
- 6. ActiveRecord子類化?
- 7. 子類化NSCalendar?
- 8. 子類化IASKAppSettingsViewController
- 9. 子類化datetime64
- 10. PyQt子類化
- 11. 子類化Slick.Grid
- 12. 子類化nssegmentedcontrol?
- 13. 子類化UICollectionReusableView
- 14. 子類化NSFont
- 15. RKObject子類化
- 16. 子類化QGraphicsLayoutItem
- 17. 子類化NSString
- 18. 子類化UIWindow
- 19. 用NSTreeController過濾NSOutlineView的孩子
- 20. NSOutlineView放在子行不起作用
- 21. NSOutlineView outlineViewSelectionDidChange
- 22. NSOutlineView + XIB
- 23. 子類化Django ModelForms
- 24. TDataset子類化:InternalRefresh
- 25. UIAlertView的子類化
- 26. scipy.stats.rv_continuous的子類化
- 27. Java:子類化AsyncTask
- 28. 子類化控制
- 29. 子類化ViewController Swift
- 30. cocos2d子類化CCSprite
簡短的回答是:你用同樣的方法子類化任何對象。你應該嘗試更具體的問題。蘋果的文檔涵蓋了子類,所以我們必須假設你已經閱讀並嘗試了一些東西然後被卡住了。你卡在哪裏? – 2009-06-14 08:46:36
對不起,我沒有閱讀所有關於子類的Apple文檔。 – Joshua 2009-06-14 13:54:22