在 Xamarin.Android 中,您可以尝试处理编辑文本按键事件。当在键盘上按下删除按钮并相应地处理事件时,Keycode 是 Keycode.Back。
editText.KeyPress += (object sender, View.KeyEventArgs e) => {
e.Handled = false;
if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Back)
{
//your logic here
e.Handled = true;
}
};
在 Xamarin.iOS 中
您可以尝试覆盖自定义文本字段 (BackDeleteEventTextField) 中的 DeleteBackward 方法并调用自定义事件 OnDeleteBackwardKeyPressed。
在自定义渲染器中,您可以使用元素更改方法中的自定义文本字段覆盖文本字段
var textField = new BackDeleteEventTextField();
并处理自定义事件 OnDeleteBackwardKeyPressed
textField.OnDeleteBackwardKeyPressed += (sender, a) =>
{
//handle the back key pressed event
};
在 Xamarin.Android 中:
在自定义渲染器中,您可以处理按键事件并查找 Keycode.Back
((EditText)this.Control).KeyPress += (object sender, View.KeyEventArgs even) => {
even.Handled = false;
if (even.Event.Action == KeyEventActions.Down && even.KeyCode == Keycode.Back)
{
//your logic here even.Handled = true;
}
};
更新
使用表单详细说明 xamarin.iOS。
第 1 步:创建一个自定义入口类并创建一个委托来处理后退按钮按下
public class CustomEntry: Entry
{
public delegate void BackButtonPressEventHandler(object sender, EventArgs e);
public event BackButtonPressEventHandler OnBackButton;
public CustomEntry() { }
public void OnBackButtonPress()
{
if (OnBackButton!= null)
{
OnBackButton(null, null);
}
}
}
第 2 步:在自定义渲染器命名空间中,创建自定义文本字段类。
[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryRenderer))]
namespace Origination.iOS.Renderers
{
public class CustomTextField: UITextField
{
}
}
第 3 步:在自定义文本字段中,创建一个事件并委托处理删除按钮的单击。
public class CustomTextField: UITextField
{
// A delegate type for hooking up change notifications.
public delegate void DeleteBackwardKeyEventHandler(object sender, EventArgs e);
// An event that clients can use to be notified whenever the
// elements of the list change.
public event DeleteBackwardKeyEventHandler OnDeleteBackwardKey;
public void OnDeleteBackwardKeyPressed()
{
if (OnDeleteBackwardKey != null)
{
OnDeleteBackwardKey(null, null);
}
}
public override void DeleteBackward()
{
base.DeleteBackward();
OnDeleteBackwardKeyPressed();
}
}
第 4 步:在自定义渲染器名称空间内,创建自定义渲染器类。
public class CustomEntryRenderer: EntryRenderer, IUITextFieldDelegate
{
}
第 5 步:在自定义渲染器的 OnElementChanged 方法中创建自定义文本字段类型的文本字段。
第 6 步:通过将自定义文本字段删除事件传递给自定义条目返回按钮事件处理程序来处理自定义文本字段删除事件。
第 7 步:将自定义文本字段对象分配给本机控件。
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
if (Element == null)
{
return;
}
var entry = (CustomEntry)Element;
var textField = new CustomTextField();
textField.EditingChanged += OnEditingChanged;
textField.OnDeleteBackwardKey += (sender, a) =>
{
entry.OnBackButtonPress();
};
SetNativeControl(textField);
base.OnElementChanged(e);
}
第 8 步:添加编辑更改处理程序
IElementController ElementController => Element as IElementController;
void OnEditingChanged(object sender, EventArgs eventArgs)
{
ElementController.SetValueFromRenderer(Entry.TextProperty, Control.Text);
}