xamarin.forms - 我想在 iOS 的 Xamarim 表单中接收物理键盘按键
问题描述
我想在 iOS 的 Xamarim 表单中接收物理键盘按键。以下代码从这个链接很好地工作:
但它仅适用于数字键。它不适用于像“A”这样的字母。添加如下图。
UIKeyCommand 加速器A = UIKeyCommand.Create((NSString)"A", 0, 选择器); AddKeyCommand(加速器A);
任何不适合字母表的原因。我是否必须设置键盘类型。如果是怎么办?
代码从这里开始:
using Foundation;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(MobileProject.MainPage), typeof (com.YourCompany.iOS.KeyboardHookRenderer))]
namespace com.YourCompany.iOS
{
public class KeyboardHookRenderer : PageRenderer
{
private string _RecvValue = string.Empty;
public override bool CanBecomeFirstResponder
{
get { return true; }
}
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
string key = string.Empty;
var selector = new ObjCRuntime.Selector("KeyRecv:");
UIKeyCommand accelerator1 = UIKeyCommand.Create((NSString)"1", 0, selector);
AddKeyCommand(accelerator1);
UIKeyCommand accelerator2 = UIKeyCommand.Create((NSString)"2", 0, selector);
AddKeyCommand(accelerator2);
UIKeyCommand accelerator3 = UIKeyCommand.Create((NSString)"3", 0, selector);
AddKeyCommand(accelerator3);
... etc as many as you need or use a loop based on key id...
}
[Export("KeyRecv:")]
public void KeyRecv(UIKeyCommand cmd)
{
if (cmd == null)
return;
var inputValue = cmd.Input;
if (inputValue == "\n" || inputValue == "\r")
{
((MobileProject.MainPage) Element)?.HandleHardwareKeyboard(_RecvValue);
_RecvValue = string.Empty;
}
else
{
_RecvValue += inputValue;
}
}
}
}
/// <summary>
/// Handle hardware keys (from KeyboardHookRender.cs in iOS project)
/// </summary>
/// <param name="keys">Keys sent, including trailing Cr or Lf</param>
public void HandleHardwareKeyboard(string keys)
{
SomeTextbox.Text = keys;
// Whatever else you need to do to handle it
}
解决方案
推荐阅读
- swift - swift中特定ElementType的XCUIElement扩展
- python - Python Treemap 自定义比例色标
- unix - 如何使用 awk 计算多列(按行)的最大值和最小值
- javascript - TypeError:无法读取未定义的属性“地图”。反应
- android - 如何将 viewModel 范围限定为与 NavHost 无关的 Dialog Composable Function
- flutter - Hive Flutter 的权限和路径
- centos - 无法访问 CPanel
- arrays - jq:错误(在
:11625): 无法遍历字符串 ("true") JQ 命令行 - indy - TIdNTLMAuthentication 与 TIdHTTP 以外的其他内容
- sql - 从字符串列中提取总小时数的 SQL 解决方案