В 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
Вы можете попробовать переопределить метод DeleteBackward в настраиваемом текстовом поле (BackDeleteEventTextField) и вызвать настраиваемое событие 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);
}