有可能得到连续的按键吗?
我使用keyCommands:来拦截在外部键盘上按下的箭头键,但是每次按下我只能收到一个调用。只要按住键,我希望每隔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, rCmd, mCmd];
}发布于 2014-01-14 10:44:40
似乎这在iOS 7中是不可能的。
发布于 2015-01-09 09:52:58
可以连续按下键,因为当您在键盘上按下一个键时,首先调用keyCommands,然后在释放该键后再次调用该方法。但是,您无法判断用户是在释放一个键还是按下另一个键,而仍然按住第一个键,所以您可以做的事情是有限制的。
只要您的应用程序不要求用户同时按下多个键,这个限制应该是可以的。如果您可以假设用户一次只按一个键,您可以使用它来连续按下键。
编辑:我得到的评论是,这似乎是一个错误的陈述。那是不对的!下面是一个完整的例子:
#import "ViewController.h"
@interface ViewController ()
{
bool keyDown;
}
@end
@implementation ViewController
- (void)viewDidLoad {
keyDown = NO;
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (NSArray*)keyCommands
{
if(keyDown==YES) {
printf("Key released\n");
keyDown = NO;
}
UIKeyCommand *upArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow
modifierFlags:0
action:@selector(upArrow:)];
return @[upArrow];
}
-(void)upArrow:(UIKeyCommand*)keyCommand
{
printf("Key pressed\n");
keyDown = YES;
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
@end当您按下向上箭头按钮时,您将在输出控制台中看到文本“按下”键。当您释放它时,您将看到文本“键已释放”。正如我提到的,有一个限制。如果您持有向上箭头,然后同时按另一个键,代码将假定向上箭头键已经释放。
当您按下并按住向上箭头键时,会发生这样的情况:
当您释放密钥时会发生这样的情况:
正如我前面提到的,这个方法有一个限制;如果您首先按下向上箭头并在按另一个按钮时按住它,则此代码将相信您已经释放了向上箭头按钮。显然,您需要用一个计时器来结束这个过程,以便在您的应用程序中连续按下键。
发布于 2015-10-26 06:55:13
专业提示-我的箭头键被阻塞了,因为我从
-(BOOL) canPerformAction:(SEL)action withSender:(id)sender 确保检查您自己创建的选择器。
https://stackoverflow.com/questions/21020814
复制相似问题