【问题标题】:NSResponder chain being broken after i remove / insert views在我删除/插入视图后,NSResponder 链被破坏
【发布时间】:2016-01-05 13:20:58
【问题描述】:

似乎当我从我的 NSViewController 主视图中删除子视图时,响应者链被修改并且新视图永远不会收到第一响应者。

视图控制器在弹出框内。顶部有搜索字段,下方有自定义视图(搜索结果)。当我显示弹出框时,我可以使用选项卡转到自定义视图。但是,如果我搜索某些词组,搜索结果会发生变化,并且选项卡不再起作用。

是否有办法“修复”响应者链?

【问题讨论】:

  • 您需要更加具体地说明您在做什么,因为显然很多应用程序会动态删除和添加视图,而响应者链没有任何问题。
  • 你是指响应者链(nextResponder)还是键视图循环/tab顺序(nextKeyView)?
  • @Willeke 我的意思是标签循环顺序是的。我在下面有搜索字段和一些自定义视图,当我更改搜索阶段时,我删除了下面的视图,之后该选项卡不起作用。
  • 谷歌搜索“nspopover key view loop”
  • @Wilkeke 谢谢,第一个结果看起来像发生了什么:mikeabdullah.net/nspopover-key-view-loop.html autorecalculatesKeyViewLoop 在弹出框默认为 false。你能发布一个答案让我接受吗?

标签: objective-c macos cocoa appkit


【解决方案1】:

迈克·阿卜杜拉的回答

NSPopover: Key View Loop

在探索 NSPopover 时,有一个发现让我有些惊讶:AppKit 在幕后为 popover 创建的 NSWindow 已关闭自动重新计算 KeyViewLoop。如果您动态更改弹出框的内容或布局,这可能会产生一些奇怪的后果,因为 AppKit 不会考虑这些更改。

(如果您需要快速解释,Key View Loop 定义了当您按下 tab 键时会发生什么,控制焦点移动到哪个位置)

由于我们不拥有相关窗口,我有点犹豫是否打开 autorecalculatesKeyViewLoop。相反,在您进行更改后,在窗口上调用 recalculateKeyViewLoop 通常非常简单。

【讨论】:

  • 5 年后,这个解决方案 recalculateKeyViewLoop 是我可以让 containerView 托管的 NSView 中的 NSTextFields 在交换时激活并正常工作的唯一方法。
猜你喜欢
  • 2020-07-20
  • 2017-11-19
  • 2015-07-06
  • 2020-09-02
  • 1970-01-01
  • 2016-11-03
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多