- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我正在构建一个程序,该程序的特点是使用 IKImageBrowserView 组件作为 NSWindow 中的 subview 。作为旁注,我有一个名为 ImageBrowserController 的 Controller 对象,它是 NSWindow 的子类,并被设置为我的应用程序的 NSWindow 对象的委托(delegate)。
我已向 IKImageBrowserView 发送了消息 setCanControlQuickLookPanel:YES,以使其能够在 IKImageBrowserView 是接收按键事件的第一响应者时自动使用 QuickLook 功能来预览图像文件。然后我花了一段时间才弄清楚如何使 IKImageBrowserView 成为第一响应者,我最终通过覆盖 ImageBrowserController 内的 AcceptFirstResponder 来工作。
现在我明白,作为 NSWindow 的委托(delegate),在 NSWindow 上触发事件后,ImageBrowserController 在响应者链中占有一席之地。据我了解,作为 NSWindow 的 subview ,IKImageBrowserView 需要传递事件以进行事件处理。我不明白的是作为第一响应者的 ImageBrowserController 与以某种方式使其到达 IKImageBrowserView 的事件之间的连接在哪里。我没有明确将 NSWindow 或 IKImageBrowserView 设置为第一响应者。那么为什么我不需要在 ImageBrowserController 中实现事件处理呢?
编辑:因此,在阅读了接受的答案并返回到我的代码后,我尝试删除 ImageBrowserController 中的 AcceptFirstResponder 覆盖,并且 QuickLook 功能仍然像接受的那样触发答案说会。当我尝试通过空格键调用 QuickLook 功能时,注释掉 setCanControlQuickLookPanel:YES 会使应用程序发出蜂鸣声。我感觉我的问题是由于 XCode 用户在更改代码后点击 RUN 按钮而不是 BUILD 按钮时出现错误造成的(叹息)。
最佳答案
您所说的有关对象之间交互的一些内容没有意义,并且在没有背景知识的情况下很难解决您提出的问题。
正如您所说,您的窗口委托(delegate)在响应者链的末尾有一个位置,在窗口本身之后。我认为您缺少的关键点是 GUI 元素,例如您的 IKImageBrowserView ,将位于链的开始处,并且它们中的任何一个都位于给定窗口中可能是当前的 firstResponder
。
当您的应用程序获取事件时,它将其传递到按键窗口(即当前接受“按键”(即“击键”)事件的窗口)。该窗口首先要求其 firstResponder
处理该事件。如果该对象拒绝,它会将事件传递给自己的 nextResponder(通常是其 super View ),后者要么处理该事件,要么将其传递下去,直到该事件已被处理或一直传递到窗口对象本身。只有这样,窗口(如果它本身不处理事件)才会请求其委托(delegate)来处理事件。
这意味着窗口委托(delegate)和 IKImageBrowserView
之间的连接仅通过 Responder Chain ,其本质很简单,如果 View 拒绝处理任何给定事件,委托(delegate)最终可能会被要求处理它,如果它们之间没有其他对象首先处理它。
您的窗口委托(delegate)不需要是 firstResponder
。重写窗口委托(delegate)上的 acceptsFirstResponder
也不会对窗口的 subview 之一产生任何影响。*
您的窗口委托(delegate)也不需要(实际上不应该)是NSWindow
的子类。它所需要的只是成为 NSObject
的子类,它实现 NSWindowDelegate Protocol
中的任何方法。您感兴趣的方法,以及处理您可能想要捕获的任何事件(如果其他对象未处理这些事件)的方法。
所以,最后你的明确问题的答案是(我并不是讽刺):如果你希望窗口委托(delegate)本身处理事件,你只需要在窗口委托(delegate)中实现事件处理。
<小时/>*:IKImageBrowserView
已对 acceptsFirstResponder
响应 YES
。如果您的窗口中没有其他 subview ,那么当您的应用程序启动时,它将自动成为 firstResponder
。您可以通过将窗口上的导出连接到您想要的任何对象,在 Interface Builder 中显式设置此 initialFirstResponder
。
关于cocoa - 当 NSWindow 对象具有 NSWindow 子类的委托(delegate)时,谁负责对接收到的事件进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327847/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!