标签: uikeycommand

如何使用return/enter键创建UIKeyCommand?

我想做一个UIKeyCommand只使用[return]密钥的东西.到目前为止,我已经尝试过:

UIKeyCommand *selectCommand = [UIKeyCommand keyCommandWithInput:@"\n" modifierFlags:0 action:@selector(chooseSelection:)];
Run Code Online (Sandbox Code Playgroud)

输入键没有全局常量,例如up,down,left,right和escape(from UIResponder.h):

// These are pre-defined constants for use with the input property of UIKeyCommand objects.
UIKIT_EXTERN NSString *const UIKeyInputUpArrow         NS_AVAILABLE_IOS(7_0);
UIKIT_EXTERN NSString *const UIKeyInputDownArrow       NS_AVAILABLE_IOS(7_0);
UIKIT_EXTERN NSString *const UIKeyInputLeftArrow       NS_AVAILABLE_IOS(7_0);
UIKIT_EXTERN NSString *const UIKeyInputRightArrow      NS_AVAILABLE_IOS(7_0);
UIKIT_EXTERN NSString *const UIKeyInputEscape          NS_AVAILABLE_IOS(7_0);
Run Code Online (Sandbox Code Playgroud)

还有什么我可以尝试捕获return/enter键吗?

objective-c uiresponder ios ios7 uikeycommand

16
推荐指数
1
解决办法
2614
查看次数

使用UIKeyCommand检测连续按键

是否可以连续按键?

我正在使用keyCommands:拦截在外部键盘上按下的箭头键,但每次按下我只能拨打1个电话.我希望只要按下按键,每隔X毫秒就可以进行多次调用,或者在按下按键和释放按键时调用.

这是我的代码:

- (NSArray *)keyCommands
{
    UIKeyCommand *upArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow
                                                modifierFlags:0
                                                       action:@selector(upArrow:)];
    UIKeyCommand *downArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputDownArrow
                                                  modifierFlags:0
                                                         action:@selector(downArrow:)];
    UIKeyCommand *leftArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputLeftArrow
                                                  modifierFlags:0
                                                         action:@selector(leftArrow:)];
    UIKeyCommand *rightArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputRightArrow
                                                   modifierFlags:0
                                                          action:@selector(rightArrow:)];
    UIKeyCommand *leftArrowCmd = [UIKeyCommand keyCommandWithInput:UIKeyInputLeftArrow
                                                     modifierFlags:UIKeyModifierCommand
                                                            action:@selector(leftArrowCmd:)];
    UIKeyCommand *rightArrowCmd = [UIKeyCommand keyCommandWithInput:UIKeyInputRightArrow
                                                      modifierFlags:UIKeyModifierCommand
                                                             action:@selector(rightArrowCmd:)];
    UIKeyCommand *lCmd = [UIKeyCommand keyCommandWithInput:@"l"
                                             modifierFlags:UIKeyModifierCommand
                                                    action:@selector(lCmd:)];
    UIKeyCommand *rCmd = [UIKeyCommand keyCommandWithInput:@"r"
                                             modifierFlags:UIKeyModifierCommand
                                                    action:@selector(rCmd:)];
    UIKeyCommand *mCmd = [UIKeyCommand keyCommandWithInput:@"m"
                                             modifierFlags:UIKeyModifierCommand
                                                    action:@selector(mCmd:)];
    return @[upArrow, downArrow, leftArrow, rightArrow, leftArrowCmd, rightArrowCmd, lCmd, …
Run Code Online (Sandbox Code Playgroud)

keyboard keyboard-shortcuts uiresponder ios uikeycommand

15
推荐指数
1
解决办法
2945
查看次数

使用UIKeyCommand检测删除密钥

任何人都知道UIKeyCommand在iOS 7上如何检测"删除"键?

cocoa ios uikeycommand

12
推荐指数
2
解决办法
4109
查看次数

iPadOS 15 beta 中 UIKeyCommand 的键盘快捷键

由于某种原因,我无法在 iPadOS 15(测试版 5)中使用硬件键盘快捷键。它们适用于大多数键,但不适用于箭头键和 Tab 键。

当在 Xcode 13(beta 4)中编译并在 iPadOS 14.5 模拟器上运行时,相同的代码似乎运行良好,但在使用相同的 Xcode 但在 iPadOS 15 sim 上构建时拒绝工作。我已经在运行 iPadOS 15 beta 5 的实际设备上进行了尝试,结果相同。

这是一个最小的例子:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        addKeyCommand(UIKeyCommand(title: "UP", action: #selector(handle(key:)), input: UIKeyCommand.inputUpArrow, modifierFlags: []))
        addKeyCommand(UIKeyCommand(title: "DOWN", action: #selector(handle(key:)), input: UIKeyCommand.inputDownArrow, modifierFlags: []))
        addKeyCommand(UIKeyCommand(title: "TAB", action: #selector(handle(key:)), input: "\t", modifierFlags: []))
    }

    @objc func handle(key: UIKeyCommand?) {
        NSLog("Intercepted key: \(key?.title ?? "Unknown")")
    }
}
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何相关报告或开放雷达,所以我怀疑我可能在这里遗漏了一些东西。如果应该报告此问题,我应该在哪里报告此类错误?

谢谢。

ios uikeycommand ipados ios15 ipados15

6
推荐指数
2
解决办法
1498
查看次数

在模拟器中尝试 iPad 快捷方式

在 iOS 9 中,开发人员可以使用UIKeyCommand将快捷方式添加到 iPad 应用程序。这些是在外部键盘上输入的,并且函数会做出反应。

有没有办法在mac上的模拟器中测试这些?或者像这样展示它们:

在此输入图像描述

ipad ios uikeycommand

5
推荐指数
1
解决办法
439
查看次数

React Native:如何支持外接 iPad 键盘(UIKeyCommand)?

iPad 可与外部蓝牙键盘配合使用,iPad Pro 具有智能键盘,您可以使用UIKeyCommand API本地支持。

如何在 React Native 中使用这些键盘快捷键?

键盘快捷键的截图,来自 NSHipster 的网站

ipad uikeycommand react-native react-native-ios

5
推荐指数
0
解决办法
196
查看次数

SwiftUI iOS - 如何捕获硬件按键事件

我是 iOS 开发的新手。按照教程,我使用 SwiftUI 创建了一个简单的计算器。

我的 iPad 上有一个键盘,我希望能够使用键盘输入值。

如何在 SwiftUI 应用程序(没有文本字段)中捕获和处理硬件键盘事件?我尝试在 SceneDelegate (UIResponder) 上使用 keyCommands,如下所示,但这对我不起作用。只要我按下 iPad 上的任意键,我就会在 XCode 跟踪视图中看到“与守护进程的连接已失效”。

 class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    override var canBecomeFirstResponder: Bool {
        return true;
    }
    override var keyCommands: [UIKeyCommand]? {
        return [
            UIKeyCommand(input: "a", modifierFlags: [], action: #selector(test)),
            UIKeyCommand(input: UIKeyCommand.inputLeftArrow, modifierFlags: [], action: #selector(test))
        ]
    }

    @objc func test(_ sender: UIKeyCommand) {
        print("test was pressed")
    }
Run Code Online (Sandbox Code Playgroud)

谢谢

uikeycommand swiftui

5
推荐指数
2
解决办法
1649
查看次数

第一次调用时将无法识别带修饰符的UIKeyCommand

我通过UIKeyCommand从视图控制器提供实例来支持iOS应用程序中的键盘快捷键.

以下工作类似于魅力,并且每次按下时都会调用提供的选择器e:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (NSArray *)keyCommands {
    return @[
        [UIKeyCommand keyCommandWithInput:@"e" modifierFlags:0 action:@selector(foo:)]];
    ];
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望键命令是+ e,或

[UIKeyCommand keyCommandWithInput:@"e" modifierFlags:UIKeyModifierCommand action:@selector(foo:)]
Run Code Online (Sandbox Code Playgroud)

这仍然有效.它会在第一次+ e时不起作用,但之后就会像魅力一样起作用.为什么会发生这种情况,我该如何解决?

keyboard-shortcuts objective-c ios uikeycommand

4
推荐指数
1
解决办法
887
查看次数

iOS Swift中断键盘事件

我在拦截键盘事件时遇到问题。我已经将我的iOS与SteelSeries Free(游戏手柄控制器)相连,当连接到iOS时,它将被检测为蓝牙键盘。当我打开Notes时进行了测试,按下游戏手柄中的任何按钮都会写一个字母。

我需要拦截此按钮的按下并运行自己的功能,但不幸的是我无法这样做。

我一直在尝试使用GCController,但显然未将其检测为Game Controller对象。当我打印计数时,它显示为0。下面是我的代码。

let gameControllers = GCController.controllers() as! [GCController]
println("configureConnectedGameControllers count: \(gameControllers.count)")
Run Code Online (Sandbox Code Playgroud)

因此,我认为这是因为游戏手柄被检测为蓝牙键盘,因此未将其检测为游戏控制器。因此,我尝试改用UIKeyCommand。下面是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    var keys = [UIKeyCommand]()
    for digit in "abcdefghijklmnopqrstuvwxyz"
    {
        keys.append(UIKeyCommand(input:  String(digit), modifierFlags: .Command, action:  Selector("keyPressed:")))
        keys.append(UIKeyCommand(input: String(digit), modifierFlags: .Control, action:  Selector("keyPressed:")))
        keys.append(UIKeyCommand(input: String(digit), modifierFlags: nil, action:  "pressKey"))
    }
}

override func canBecomeFirstResponder() -> Bool {
    return true
}

func keyPressed(command: UIKeyCommand) {
    println("another key is pressed") //never gets called
}

func pressKey() {
    println("a key is pressed")
}
Run Code Online (Sandbox Code Playgroud)

但是即使使用上述实现,当我按下游戏手柄上的按钮时,控制台上也不会打印任何内容。

这使我感到困惑。因此,如果您对此有任何答案,请帮助我。提前致谢!

keyboard ios gamecontroller swift uikeycommand

4
推荐指数
1
解决办法
2239
查看次数

如何使用 UIKeyCommand

当用户按下硬件键盘上的向下箭头时,我尝试在表视图中选择一行。现在,我只是想打印日志,但似乎无法让它工作。根据其他类似问题的答案,这是我到目前为止所得到的:

- (NSArray *)keyCommands {
UIKeyCommand *downArrowKeyCommand = [UIKeyCommand keyCommandWithInput:UIKeyInputDownArrow
                                                        modifierFlags:0
                                                               action:@selector(hardwareKeyboardDownArrowPressed)];

return @[downArrowKeyCommand];
}

- (BOOL)canBecomeFirstResponder {
return YES;
}

- (void)hardwareKeyboardDownArrowPressed {

NSLog(@"Down arrow pressed on external keyboard");

}
Run Code Online (Sandbox Code Playgroud)

感谢所有帮助!

objective-c uikeycommand

4
推荐指数
1
解决办法
1685
查看次数

停止UIKeyCommand重复操作

如果注册了按键命令,则如果用户按住按键时间过长,则可能多次调用该操作。这会产生非常奇怪的效果,就像?N可以多次重复打开新视图一样。是否有任何简单的方法可以停止这种行为,而无需诉诸布尔值“已经触发”标志?

这是我注册两个不同的键盘命令的方法:

#pragma mark - KeyCommands

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (NSArray<UIKeyCommand *>*)keyCommands {
    return @[
             [UIKeyCommand keyCommandWithInput:@"O" modifierFlags:UIKeyModifierCommand action:@selector(keyboardShowOtherView:) discoverabilityTitle:@"Show Other View"],
             [UIKeyCommand keyCommandWithInput:@"S" modifierFlags:UIKeyModifierCommand action:@selector(keyboardPlaySound:) discoverabilityTitle:@"Play Sound"],
             ];
}

- (void)keyboardShowOtherView:(UIKeyCommand *)sender {
    NSLog(@"keyboardShowOtherView");
    [self performSegueWithIdentifier:@"showOtherView" sender:nil];
}

- (void)keyboardPlaySound:(UIKeyCommand *)sender {
    NSLog(@"keyboardPlaySound");
    [self playSound:sender];
}

#pragma mark - Actions

- (IBAction)playSound:(id)sender {
    AudioServicesPlaySystemSound(1006); // Not allowed in the AppStore
}
Run Code Online (Sandbox Code Playgroud)

可以在此处下载示例项目:TestKeyCommands.zip

iphone ipad ios uikeycommand

4
推荐指数
2
解决办法
289
查看次数