gpt4 book ai didi

events - iOS 7 硬件键盘事件

转载 作者:行者123 更新时间:2023-12-04 17:35:58 28 4
gpt4 key购买 nike

现在我们有了 iOS 7,Apple 显然已经删除了从 -sendEvent: 接收键盘通知的选项。 .对于想要编写捕获所有关键事件并将其发送到远程计算机 E.G. 的东西的人来说,这是一个巨大的痛苦。 VNC 客户端。 UIKeyCommand不提供所需的功能。有很多错误报告提交给苹果,但他们不会听。错误报告苹果正在关闭所有报告,因为重复是 rdar://14129420。

什么是最好的解决方案?

最佳答案

我至少能够以私有(private) API 的方式将这些事件取回,但是 keyup 不会返回任何有用的信息,例如已释放的 key 。也许这是可以从 UIEvent 中提取的东西。 ?

需要添加的代码如下定义UIPhysicalKeyboardEvent .

@interface PhysicalKeyboardEvent : UIEvent {//UIPhysicalButtonsEvent
int _inputFlags;
NSString *_modifiedInput;
NSString *_unmodifiedInput;
NSString *_shiftModifiedInput;
NSString *_commandModifiedInput;
NSString *_markedInput;
long long _modifierFlags;
NSString *_privateInput;
}
+ (id)_eventWithInput:(id)arg1 inputFlags:(int)arg2;
@property(retain, nonatomic) NSString *_privateInput; // @synthesize _privateInput;
@property(nonatomic) int _inputFlags; // @synthesize _inputFlags;
@property(nonatomic) long long _modifierFlags; // @synthesize _modifierFlags;
@property(retain, nonatomic) NSString *_markedInput; // @synthesize _markedInput;
@property(retain, nonatomic) NSString *_commandModifiedInput; // @synthesize _commandModifiedInput;
@property(retain, nonatomic) NSString *_shiftModifiedInput; // @synthesize _shiftModifiedInput;
@property(retain, nonatomic) NSString *_unmodifiedInput; // @synthesize _unmodifiedInput;
@property(retain, nonatomic) NSString *_modifiedInput; // @synthesize _modifiedInput;
@property(readonly, nonatomic) long long _gsModifierFlags;
- (void)_privatizeInput;
- (void)dealloc;
- (id)_cloneEvent;
- (_Bool)isEqual:(id)arg1;
- (_Bool)_matchesKeyCommand:(id)arg1;
//- (void)_setHIDEvent:(struct __IOHIDEvent *)arg1 keyboard:(struct __GSKeyboard *)arg2;
@property(readonly, nonatomic) long long _keyCode;
@property(readonly, nonatomic) _Bool _isKeyDown;
- (long long)type;
@end

要监听事件,请在 UIResponder 中使用以下内容.我不确定响应者是否需要成为关键。
- (id)_keyCommandForEvent:(PhysicalKeyboardEvent *)event {
//Some reason it gets called twice and it's not because of keyup. Keyup seems to not mention it's original key.
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self performSelector:@selector(processEvent:) withObject:event afterDelay:0];
return [super _keyCommandForEvent:event];
}
- (void)processEvent:(PhysicalKeyboardEvent *)event {
NSLog(@"%@", [event _unmodifiedInput]);
NSLog(@"%d", [event _isKeyDown]);
NSLog(@"%d", [event _inputFlags]);
if ([event _isKeyDown] && [[event _unmodifiedInput] isEqualToString:@"s"] && [event _modifierFlags]==206158430208) {
NSLog(@"Hello");
}
}

我希望这段代码至少对需要它的人有所帮助。您可以使用 _modifierFlags 确定何时按下命令键、选项键和控制键.我没有玩太多,但似乎是获得事件的好方法。

您可以从 http://nacho4d-nacho4d.blogspot.com/2012/01/catching-keyboard-events-in-ios.html 借用代码改善。如果其他人找到更好的方法,请发布他们!

由于这是使用私有(private) API,最好将所有内容都包含在 respondsToSelector 中。 .诸如 _unmodifiedInput 之类的东西.

我不确定苹果是否会接受实现此功能的应用程序,因此使用风险自负。

关于events - iOS 7 硬件键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18747759/

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