我有一個基於文檔的可可應用程序,其中應用程序菜單中的項目與IBAction
連接。單擊該項目需要執行一項任務,該任務在使用另一個類MyDocument
的主筆尖文件中使用IBOutlet
。創建兩個同一類的對象,每個筆尖都有一個似乎不起作用。我怎樣才能訪問插座?從其他類訪問IBOutlet
回答
菜單項的操作通常會發送給第一個響應者,以便當前選擇的任何操作都可以對其執行操作。
聽起來像這個動作是對當前文檔有效的東西,那麼它應該由文檔來實現。在這種情況下,將菜單發送給第一響應者,然後將操作方法放入MyDocument類中。
如果您嘗試發送的操作是自定義操作:在主菜單筆尖中選擇First Responder項目,添加您的方法名稱,然後將菜單項的選擇器連接到操作。
閱讀Cocoa Event-Handling Guide的Responders部分了解更多信息。
非常感謝,它非常完美! – nosedive25 2010-11-10 00:42:47
總結上述內容,在您的NIB/XIB文件中,在界面構建器中建立與First Responder對象的連接,而不是文件所有者或其他任何東西。你仍然可以在潛在的第一響應者身上接受一系列的行動。然後
可可需要的是選擇和多達查找它,開始用的NSView(如果有的話),這是目前國內第一反應,然後用NSDocument這是當前使用的,那麼它的窗口控制器等等等等一路到應用程序委託。它檢查的第一個對象實際上實現了該方法,它將使用該對象(在用同一對象驗證它之後)。
所以:
@interface MyDocumentTypeA : NSDocument {
}
-(void)myMenuAction:(id)sender;
-
@interface MyDocumntTypeB : NSDocument {
}
// -myMenuAction: not implemented here
-
@interface MyApplicationDelegate ... {
}
-(void)myMenuAction:(id)sender;
-
在Interface Builder(甚至在程序上),如果您已經鏈接了「行動「的菜單項到a在First Responder上選擇名爲「myMenuAction:」的選擇器(等同於以編程方式完成時未指定目標),對於上述兩個文檔子類,將發生以下情況。
對於MyDocumentTypeA,當用戶選擇該菜單項時,MyDocumentTypeA的-myMenuAction:將被調用。由於MyDocumentTypeB沒有實現這個動作,Cocoa將繼續查找響應者鏈,直到它到達你的應用程序委託,該應用程序委託實現它,所以它將在這裏調用。
如果Cocoa在執行該方法的響應者鏈中未找到對象,則菜單項保持禁用狀態。
你如何與First Responder對象建立連接? – Shamoon 2012-08-23 14:27:00
有一種方法如何做到這一點,我已經張貼的答案類似的線程:Access IBOutlet from other class (ObjC)
- 1. Swift - 在其他類中訪問IBOutlet
- 2. 如何在swift中訪問IBOutlet從一個類到其他類
- 3. 從其他類訪問NSStrings
- 4. 從其他類訪問「currentState」?
- 5. 從其他類Cocoa調用IBOutlet
- 6. 訪問其他類
- 7. 從另一個類訪問IBOutlet
- 8. 如何從其他派生類訪問其他派生類?
- 9. 從其他類訪問變量
- 10. 從其他類訪問私有成員
- 11. 從其他類訪問方法Objective-C
- 12. 從其他類訪問數據
- 13. 從其他類,Swingworker訪問JLabel
- 14. 從其他頁面訪問頁面類
- 15. cplex從其他類的變量訪問
- 16. 從其他類訪問變量
- 17. 從其他類訪問枚舉值
- 18. 從其他模塊訪問類
- 19. 從其他類訪問Java Swing TextField
- 20. 從其他類訪問int變量
- 21. 從XML訪問其他XML?
- 22. IBOutlet和其他弱或強
- 23. LinkedList類不能訪問其他類
- 24. 來自其他類的Webpack訪問類
- 25. 從另一個班級訪問IBOutlet?
- 26. 如何從c#中的其他類訪問MainWindow類工具
- 27. 如何從其他類訪問某個類的屬性?
- 28. 如何從python中的其他類訪問類變量?
- 29. 從其他類訪問類中的函數
- 30. 訪問其他類的本地變量從一個類
你需要澄清一下鉤住什麼。從您的描述中不清楚。 – 2010-11-07 23:50:19