当前位置:  开发笔记 > IOS > 正文

停止UIKeyCommand重复操作

如何解决《停止UIKeyCommand重复操作》经验,为你挑选了1个好方法。

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

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

#pragma mark - KeyCommands

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (NSArray*)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
}

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



1> Rich Waters..:

通常,您不需要处理此问题,因为新视图通常将成为firstReponder并停止重复。对于playSound情况,用户将意识到发生了什么,并将手指从键上移开。

就是说,在实际情况下,特定的密钥永远都不应重复。如果Apple为此提供公共API,那就太好了。据我所知,他们没有。

给定代码中的“ // AppStore中不允许”注释,您似乎可以使用私有API。在这种情况下,您可以使用以下命令禁用对keyCommand的重复:

UIKeyCommand *keyCommand =  [UIKeyCommand ...];
[keyCommand setValue:@(NO) forKey:@"_repeatable"];


疯狂的是,这不是公共API的一部分。谢谢您的帮助!
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有