gpt4 book ai didi

ios - UIKeyCommand 操作未被调用

转载 作者:行者123 更新时间:2023-11-28 23:35:13 26 4
gpt4 key购买 nike

我正在尝试向我的应用程序添加键盘快捷键,但我遇到了未调用 UIKeyCommand 操作的问题。

我得到了一个覆盖 KeyCommands 的 UIViewController。

- (BOOL)becomeFirstResponder
{
return YES;
}

- (NSArray<UIKeyCommand *> *)keyCommands
{
return self.keyCommandManager.keyShortcutsArray;
}

我还有一个 NSObject 的 KeyCommandManager 类,它有两个方法,一个根据我的应用程序的状态设置 keyShortcutsArray,另一个是应该由 UIKeyCommands 触发的方法。

- (void)setKeyShortcutsOfType:(ShortcutType)shortcutType
{
switch(shortcutType)
{
case PlaybackPreviewShortcut:
self.keyShortcutsArray = @[[UIKeyCommand keyCommandWithInput:@" " modifierFlags:0 action:@selector(keyShortcutActions:) discoverabilityTitle:@"Toggle playback preview"]];
break;
default:
self.keyShortcutsArray = @[];
break;
}

- (void)keyShortcutActions:(UIKeyCommand)sender
{
NSLog(@"#### This method is not being called by the space key shortcut");
}

目前,当按下一个键时,KeyCommand 覆盖方法正在获取正确的数组。但是,这些键的选择器不起作用,并且未调用 keyShortcutActions 方法。

最佳答案

来自 Apple 的 docs :

The key commands you return from this method are applied to the entire responder chain. When an key combination is pressed that matches a key command object, UIKit walks the responder chain looking for an object that implements the corresponding action method. It calls that method on the first object it finds and then stops processing the event.

NSObjectkeyCommandManger 实例在响应链中—— View Controller 在。

如果你使用这个方法:

- (void)keyShortcutActions:(UIKeyCommand)sender
{
NSLog(@"#### This method IS being called (in view controller) by the space key shortcut");
}

您应该看到它被触发。

如果您希望您的“操作”代码包含在 keyCommandManger 中,您可以将事件转发给您的管理器对象。或者,您可以尝试更改您的管理器类以从 UIResponder 继承——但将它可靠地放入链中是困难的部分。

关于ios - UIKeyCommand 操作未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55144397/

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