我有一个带有登录页面的应用程序,该页面包含三个不同随机字符的字段。当用户离开最后一个字段时,软键盘消失,用户可以触摸屏幕上的“登录”按钮。
当连接了硬件键盘(蓝牙或物理)时,我希望能够点击“输入”。但是因为用户不在某个字段中,所以我看不到如何检测被按下的键。
有人会就哪个班级处理重点新闻事件提出建议吗?据推测,我可以使用一个代表来接收这些代理,但我在SDK中的搜索没有找到任何内容。
由于
答案 0 :(得分:13)
对于iOS 7.0或更高版本,您可以从任何UIResponder返回keyCommands属性的UIKeyCommands,例如UIViewController:
<强>目标C 强>
// In a view or view controller subclass:
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (NSArray *)keyCommands
{
return @[ [UIKeyCommand keyCommandWithInput:@"\r" modifierFlags:0 action:@selector(enterPressed)] ];
}
- (void)enterPressed
{
NSLog(@"Enter pressed");
}
<强>夫特强>
// In a UIView/UIViewController subclass:
override func canBecomeFirstResponder() -> Bool {
return true
}
override var keyCommands: [UIKeyCommand]? {
return [ UIKeyCommand(input: "\r", modifierFlags: [], action: #selector(enterPressed)) ]
}
@objc func enterPressed() {
print("Enter pressed")
}
答案 1 :(得分:1)
实现此目的的一种方法是使用隐藏的额外(在您的情况下为第4个)文本字段。使其尺寸为1x1像素且透明。然后在任何其他3个文本字段都没有时将其设为第一个响应者,并在该隐藏字段中查找文本更改事件以触发您的键输入事件。
如果您不想让软件键盘保持可见,您可能还需要检查软件键盘的通知。
答案 2 :(得分:1)
作为@Patrick回复的后续内容,以下是您在Xamarin.iOS中的操作方法:
public override bool CanBecomeFirstResponder
{
get { return true; }
}
public override UIKeyCommand[] KeyCommands
{
get
{
return new[]{ UIKeyCommand.Create((NSString)"\r", (UIKeyModifierFlags)0, new ObjCRuntime.Selector("enterPressed")) };
}
}
[Export("enterPressed")]
private void OnEnterPressed()
{
// Handle Enter Key
}