问题标签 [nsresponder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
36 浏览

cocoa - NSResponder 打印:调用到错误的地方

在我的 NSViewController 中,我放置了一个 print(_:) 方法,但是当我点击打印时它没有被调用。相反,打印被我所在的当前 NSTextField 捕获。如何强制打印调用进入视图控制器?我是这样定义的:

0 投票
1 回答
55 浏览

cocoa - NSResponder 和多个 NSTableView - 谁发送了消息?

我在一个 NSViewController 中有两个 NSTableView,每个都有自己的 NSArrayController 来处理存在的内容。我现在正在尝试连接 Edit->Delete 按钮。当调用删除方法时,我怎么知道“谁”发送了该消息?

具体来说,我想知道当我选择“删除”菜单项时,我是被点击到第一个表视图还是第二个表视图。删除方法的“发送者”只是 NSMenuItem,所以我无法将其回溯到表中。

0 投票
1 回答
149 浏览

swift - 如何在 swift 2.2 中更新 NSResponder 选择器

我正在实现一个 NSControlTextEditingDelegate 协议,但我不知道我应该与哪个类/协议匹配,例如 commandSelector。#selector(WhichClass.moveUp(_:)) 以便相等通过。

目前 swift 2.1 一切正常:

0 投票
2 回答
1022 浏览

swift - 可以在 NSTextView 中加下划线,但不能加粗文本

我有一个使用 Xcode 8 中的向导创建的 NSDocuments 和故事板应用程序。在 ViewController 场景中,我添加了一个 NSTextView。某些菜单项被禁用,例如粗体和斜体。

看着 First Responder,粗体和斜体的动作不存在。我应该自己编写这些方法吗?这是由于未正确设置响应者链吗?为什么下划线显示但不加粗?

编辑:添加图像以显示如何使用检查器栏编辑文本,但“格式”菜单未显示我期望的命令。

图像显示了我如何使用检查栏修改文本,但不能使用菜单,除了下划线

0 投票
0 回答
127 浏览

cocoa - 非 NSView NSResponder 来处理 NSDocument 响应者动作

我的 NSDocument 子类(MyDocument)非常大,我正在考虑制作一个 MyDocumentResponder(NSResponder 的子类)来处理文档响应程序事件以清理代码。这对我来说似乎比 MyDocument 上的一个类别更好。

MyDocumentResponder 将在 MyDocument nib 中实例化,并具有将其挂钩到其拥有的 MyDocument 的属性。

在 MyDocumentResponder 中,我可以实现 AcceptFirstResponder,但是如何正确地将其挂接到响应者链中(如果文档失去其最前面的状态,则将其删除?

我是否应该通过将 becomeFirstResponder 和 resignFirstResponder 添加到 MyDocument 来连接它?在这种情况下,它应该放在 MyDocument 的前面还是后面?

0 投票
1 回答
282 浏览

objective-c - 处理包含文本字段和滚动视图的 Cocoa 视图中的选项卡

在我的 Cocoa 应用程序中,我有一个包含 NSTextField(原样)和 NSScrollView(子类)的窗口。我有一个 NSViewController 来管理包含文本字段和滚动视图的窗口的 NSView。

在应用程序启动时,NSTextField 具有焦点,并且键入会将字符输入到该文本框中。当我按 TAB 键时,它会失去焦点。但是界面中没有其他东西,如 NSScrollView,获得焦点。我不知道任何按键事件发生在哪里。

如何将焦点转移到 NSScrollView,以便按键事件可以影响它(例如,箭头键、隐式搜索等)?

0 投票
1 回答
1530 浏览

cocoa - 相关控制器中的 NSToolbarItem 验证

我有一个 NSToolbarItem,其视图为 NSButton,主菜单中有一个 NSMenuItem。两者都有相同的动作,发送给第一响应者,而不是特定目标。该方法最终在 NSSplitViewController 的子类中实现,位于窗口内容视图的视图层次结构中。我想验证这两个项目,但让特定的拆分视图控制器负责验证,因为它依赖于该控制器本地的一些条件。

我覆盖validateToolbarItem(_:)validateMenuItem(_:)在那个拆分视图控制器中。对于菜单项,这是按预期工作的。调用该方法并进行验证。validateToolbarItem(_:)但是,从不调用。

根据Apple 的文档,NSToolbar 不会发送validateToolbarItem(_:)到基于视图的工具栏项目。为了测试这一点,我用图像工具栏项目替换了工具栏项目,它可以按预期工作。

基于此,我遇到了几种解决方案,但它们并不是我想要的。

  • 子类 NSToolbarItem 并覆盖validate()。但是,没有给出关于我最终如何让控制器validateToolbarItem(_:)调用的指导。

  • 子类 NSToolbar 和 override validateVisibleToolbarItems(),然后向第一响应者发送消息。在这里,我遇到了问题,我无法向拆分视图控制器发送消息,因为它位于工具栏的响应程序链之外。

  • 子类 NSToolbar 如上所述,但validateToolbarItem(_:)在响应者链中的控制器中实现,例如 NSWindowController。这会起作用,但是我必须添加额外的代码来处理菜单项不需要的内容。

是否有一个优雅的解决方案可以像图像工具栏项和菜单项一样工作?

0 投票
1 回答
1114 浏览

macos - 如何在 NSWindow 中捕获转义键?

我有一个带有 NSWindowController(故事板入口点)的故事板,其内容是 NSViewController。当用户在我的应用程序中选择一个菜单项时,我会加载情节提要并显示它。

现在我想要“退出”键来关闭窗口。我已经看到了几个关于此的问题,但没有一个与我所看到的行为相匹配。

我将 NSWindowController 和 NSViewController 子类化,并将情节提要中的控制器设置为这些。我已经尝试了所有我能找到或想到的方法,包括:

  • override func cancelOperation(_ sender: Any?)
  • func cancel(_ sender: Any?)
  • override func keyDown(with event: NSEvent)

在窗口控制器、视图控制器,甚至是自定义的 NSWindow 子类中,但这些方法都没有被调用。我已经确认viewDidLoad()并且windowDidLoad()确实会被调用,所以我的课程正在被使用。他们只是没有得到事件。

为了验证我的理智,我尝试检查响应者链正如预期的那样,我的自定义窗口控制器和视图控制器类都在其中,NSWindow 子类也是如此。

为什么响应者链中的 NSResponder 对象不会收到事件?

0 投票
1 回答
187 浏览

swift - NSView/NSResponder 智能放大:

我正在尝试smartMagnify:在一个中实现NSView,但它从未被调用过。我有rotate:,magnify:等,并且它们都被成功调用 - 我需要做什么才能收到此消息?我搜索了文档,该文档非常稀疏,找不到不调用它的原因。

这就是我认为与我的代码相关的内容......

只是通过迷信,我尝试将自己设置为急救人员,以防万一这与此有关,但这没有任何区别。

0 投票
1 回答
113 浏览

macos - 可以用不同手势滚动的嵌套 NSScrollViews?

我有一个NSScrollView嵌套在另一个应用程序中的应用程序NSScrollView。我希望用户能够使用两指滑动来滚动内部滚动视图,并使用三指滚动外部滚动视图。

我想我需要以某种方式配置每个滚动视图以拒绝手指数量错误的触摸,但我不知道该怎么做。