gpt4 book ai didi

cocoa - NSViewController中如何让view的子控件会聚焦于Tab和Shift+Tab

转载 作者:行者123 更新时间:2023-12-03 17:07:00 28 4
gpt4 key购买 nike

我必须升级一个现有应用程序,并且需要将其现有 UI 拆分为单独的 NIB。我计划首先为所有分割的 UI 创建单独的 NIB 和 NSViewController。现在的问题是我的 NSViewController 没有响应键盘 TAB 和 SHFIT+TAB 事件,我只是希望当用户单击 TAB 或 SHIFT+TAB 时,我的 NSViewController 将焦点设置在动态加载的 NSViewController View 中适当的子控件上。

谢谢

编辑:以下是我的要求。

我有三个 subview ,需要动态加载并使用 MainWindow 占位符 NSBox 中的 NSPopupButton 进行切换。

为了检查,我创建了新的 cocoa 应用程序,并向 Window 添加了一个 NSPopupButton 和 NSBox,并加入了 NSPopupButton 和 NSBox 的导出。

其次,我创建了三个新的 NSViewController,其中包含三个不同的 NIB,其中包含单独的自定义 View ,其中包含两个或三个 NSTextField 的子控件。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
}

在主应用程序委托(delegate)函数中,我将所有三个 NSViewController 添加到一个数组中,然后使用 ReplaceSubview 交换 View 以替换占位符 NSBox 中的 View 。

我在所有三个 NSViewController 中添加了以下代码,但我仍然没有通过按 TAB 或 SHIFT+tab 键来关注子控件。

- (void)loadView {
[super loadView];

// store the responder that’s right after the view in the responder chain
NSResponder *nextResponder = [[self view] nextResponder];

// set the view controller (self) as the next responder after the view
[[self view] setNextResponder:self];

// set the stored responder as the next responder after the view controller
[self setNextResponder:nextResponder];
}

最佳答案

即使 NSViewController 继承自 NSResponder,Cocoa 也不会自动将 NSViewController 实例添加到 responder chain 。你需要自己做。

一种可能的解决方案是将 View Controller 插入它正在控制的 View 和该 View 的下一个响应者之间的响应者链中。例如,在您的 View Controller 实现中,

- (void)loadView {
[super loadView];

// store the responder that’s right after the view in the responder chain
NSResponder *nextResponder = [[self view] nextResponder];

// set the view controller (self) as the next responder after the view
[[self view] setNextResponder:self];

// set the stored responder as the next responder after the view controller
[self setNextResponder:nextResponder];
}

关于cocoa - NSViewController中如何让view的子控件会聚焦于Tab和Shift+Tab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013372/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com