Objective-C NSWindow从键中删除窗口

时间:2011-02-05 00:12:47

标签: objective-c cocoa key nswindow

你需要一些帮助,我有一个窗口设置为始终显示在右上角但它没有设置为始终键。窗口上有几个按钮,当点击一个按钮时,窗口变成了键,但我想要它做的是当点击一个按钮时,我希望窗口将自己从键中删除。

理想情况下,当单击按钮时窗口变为键,并且在按钮调用的方法中,我想编写一个语句,然后执行按钮的操作并从键中删除窗口。

然而,窗口是在app delegate下声明的,链接到该按钮的方法是在单独的头文件中声明的。

任何人都有任何想法如何我能做到这一点,任何帮助将不胜感激。 提前谢谢,萨米。

1 个答案:

答案 0 :(得分:1)

根据应用程序的体系结构,有一些解决方案。

  1. 发送[[NSApp mainWindow] makeKeyWindow],这将使主窗口成为关键。

  2. 您的应用程序委托可以引用主窗口。在处理按钮单击的操作方法中,您可以要求应用程序委托使主窗口成为关键。应用程序代表将发送[mainWindow makeKeyWindow]

  3. 您的应用程序委托可以引用管理主窗口的窗口控制器。在处理按钮单击的操作方法中,您可以要求应用程序委托使主窗口成为关键。应用程序委托将要求主窗口控制器执行此操作,主窗口控制器将发送[[self window] makeKeyWindow]

  4. 您的应用程序代理可以收听NSWindowDidResignKeyNotification通知,并保留对最后一个重新签名的窗口的引用。在处理按钮单击的操作方法中,您可以要求应用程序委托将键状态返回到上一个窗口。当窗口是辅助窗口时,应用程序委托需要忽略NSWindowDidResignKeyNotification通知。当没有单个主窗口时,此解决方案更好。

  5. 如果第一个解决方案不适用,a)您的应用程序委托可以符合声明负责将关键状态恢复到正确窗口的方法的协议,或者b)您的操作方法可以发布通知,通知应用程序您的action方法已完成,并让应用程序委托侦听该通知并将密钥状态恢复到正确的窗口。

    请注意,尽管我建议应用程序委托实现恢复密钥状态的行为,但其他对象可能会对此负责。使用通知时这尤其容易,因为由于通知提供的固有松散耦合,无需获取将恢复密钥状态的对象的引用。