c# - Xamarin Forms iOS 应用程序检测到 "Return"已按下

标签 c# ios xamarin.forms

我在 Xamarin Forms 中有一个自定义输入控件 (ExtendedEntryCell),并且想要检测用户是否按下了键盘上的“Return”。自定义控件如下所示。

public class ExtendedEntryCell : Entry
{
    public event EventHandler<EventArgs> KeyPressed;

    public void SendKeyPressed(object sender, EventArgs e)
    {
        KeyPressed?.Invoke(sender, e);
    }
}

对于 Windows Phone,我基于 this (External Link) 创建了一个自定义渲染器例子。

protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
    base.OnElementChanged(e);

    if (Control == null)
        return;

    Control.KeyDown -= Control_KeyDown;
    Control.KeyDown += Control_KeyDown;
}

private void Control_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
    {
        (Element as ExtendedEntryCell).SendKeyPressed(Element, new EventArgs());
    }
}

Xamarin Forms 中是否有针对 iOS 的类似解决方案?

最佳答案

订阅Completed事件,当用户点击返回时触发:

MyEntry.Completed += MyEntry_Completed;
private void MyEntry_Completed(object sender, EventArgs e)
{
}

Is there a way to figure out, which key got pressed?

订阅 TextChanged 事件,通过检测 OldTextValueNewTextValue 我们可以得到哪个键被点击了,比如:

private void MyEntry_TextChanged(object sender, TextChangedEventArgs e)
{
    Debug.WriteLine(string.Format("old value:{0}", e.OldTextValue));
    Debug.WriteLine(string.Format("new value:{0}", e.NewTextValue));
}

但是在表单中我们只能得到这两个值,如果用户试图从中间位置插入文本,我们可能会计算出错误的键字符串。因为我们无法获取用户开始插入的范围。为此,我们应该为入口创建一个渲染器,并订阅委托(delegate):

public override bool ShouldChangeCharacters(UITextField textField, NSRange range, string replacementString)
{
    return true;
}

replacementString 表示被点击的字符。如果是 "",则用户单击退格键。

关于c# - Xamarin Forms iOS 应用程序检测到 "Return"已按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48383720/

相关文章:

c# - 让 ControlTemplate 中的 AutowireViewModel 工作

c# - WPF,将代码直接放在InitializeComponent之后的错误做法?

c# - 存在哪些基于 XNA 的 3D 地形和物理库?

c# - 将文件和模型发布到 ASP.NET Core MVC6 中的 Controller

ios - 快速解析双 JSON 编码数组并访问它

ios - 如何根据传入远程通知负载中定义的类别添加不同的操作? swift 更新

c# - 使用 TabbedPage 切换 iOS NavigationPage.SetHasNavigationBar 会导致隐藏选项卡

ios - 如何在 iOS 上旋转后修复 Xamarin Forms 中的 WebView 布局(WKWebView)

c# - FirstOrDefault 两种方式

ios - 尝试使用约束以编程方式移动 UIPickerView 但总是收到此错误消息