Objective c (BOOL)windowShouldClose:(id)发送方不';t在我设置为主菜单的contentview的视图中工作';窗户
我将NSViewController的视图设置为主菜单窗口的contentview,现在应该如何使用-(BOOL)windowShouldClose:(id)sender 我在@interface中使用Objective c (BOOL)windowShouldClose:(id)发送方不';t在我设置为主菜单的contentview的视图中工作';窗户,objective-c,cocoa,nsevent,Objective C,Cocoa,Nsevent,我将NSViewController的视图设置为主菜单窗口的contentview,现在应该如何使用-(BOOL)windowShouldClose:(id)sender 我在@interface中使用,并将-(BOOL)windowShouldClose:(id)sender放在.m上,但不起作用-(BOOL)windowShouldClose:(id)sender只被发送给将发送消息的窗口的代理。(如果你不清楚代表是什么,他们有点像每个人都向其报告的陆军指挥官) 在这里,为了能够在NSVie
,并将-(BOOL)windowShouldClose:(id)sender
放在.m上,但不起作用-(BOOL)windowShouldClose:(id)sender
只被发送给将发送消息的窗口的代理。(如果你不清楚代表是什么,他们有点像每个人都向其报告的陆军指挥官)
在这里,为了能够在NSViewController
中使用-windowShouldClose:
,您需要将NSViewController
设置为窗口的委托。这有两个步骤:
使“NSViewController”成为可能的窗口
代表。通常窗口的委托是NSWindowController
(命名它是有原因的),但是如果你想
“NSViewController”您需要使用
协议,您已经完成了
实际上,将视图控制器设置为委托。作为肯·托马斯
在他的评论中提到,您可以在Interface Builder中通过
拖动窗口的代理
出口并将其连接到您的
NSViewController。或者,您可以通过编程方式执行此操作:
[self.view.window setDelegate:self]
如您所述,应该可以正常工作
您是说您正在尝试将NSViewController设置为窗口的代理吗?那是很不寻常的。这通常是窗口的控制器(尽管它可以是任何对象)。无论如何,您需要将窗口的委托
属性设置为指向其委托对象。由于delegate
也是NSWindow的一个出口,您可以在IB中进行连接。或者,您可以在代码中进行连接。我希望当用户关闭窗口时(我将NSViewController的视图设置为其内容的窗口)。您的意思是我使用viewController中的[self.view.window setDelegate'?我在mainMenu.xib中连接窗口的委托,在我将viewController的视图设置为窗口的内容视图之前,我执行[self.vController对象.view.window setDelegate:self];
,然后使用-(BOOL)windowShouldClose:(id)发送方
在视图控制器中,但不起作用。如果您已经在Interface Builder中完成了,则无需在代码中再次执行此操作。|此外,在代码中:您希望以什么作为委托?如果您希望视图控制器作为委托,并且您正在从AppDelegate类调用,则需要[self.vControllerObject.view.window setDelegate:vControllerObject]
,或者更好的方法是,[self.window setDelegate:vControllerObject]
,如果您有随模板提供的窗口属性。