gpt4 book ai didi

c# - 当 xamarin 表单中的条目为空时,是否有一种方法可以在按下删除时触发事件

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:43 25 4
gpt4 key购买 nike

所以我有四个不同的条目,它们充当 pin 输入支架,我想做的是,基本上,当按下退格键时,每个条目都应该转到前一个条目,考虑到按下退格键的条目是空的。

我尝试在 Renderer 中执行此操作,但是当它为空时它不会触发任何东西,TextChanged 也是如此

我试图做的是一个小技巧,我试图在其中放置“”,这是初始化时所有条目中的一个空格,当用户尝试放置一些东西时,我会检查旧值和新值值,并替换它,但问题似乎是当我导航到第二个条目并假设我按退格键时,我应该能够进入第一个条目,这是我无法弄清楚的

下面是我尝试做的一小段,但它有一些问题,任何输入都会有所帮助

private void secondEntry_TextChanged(object sender, TextChangedEventArgs e)
{
if (e.OldTextValue == null && !e.NewTextValue.Equals(" "))
{
Entry_Second.Text = e.NewTextValue;
Entry_Third.Focus();
}
else if (e.NewTextValue == "")
{
Entry_Second.Text = " ";
}
else
{
Entry_Second.Focus();
}
}

最佳答案

在 Xamarin.Android 中,您可以尝试处理编辑文本按键事件。 Keycode为Keycode。当键盘上的删除按钮被按下时返回并相应地处理事件。

          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 步:创建一个自定义入口类并创建一个委托(delegate)来处理后退按钮按下

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 步:在自定义文本字段中,创建一个事件并委托(delegate)处理删除按钮的点击。

 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 步:在自定义渲染器 namespace 中,创建自定义渲染器类。

 public class CustomEntryRenderer: EntryRenderer, IUITextFieldDelegate
{
}

第 5 步:在自定义呈现器的 OnElementChanged 方法中创建自定义文本字段类型的文本字段。

第 6 步:通过将自定义文本字段删除事件传递给自定义输入后退按钮事件处理程序来处理自定义文本字段删除事件。

第 7 步:将自定义文本字段对象分配给 native 控件。

 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);
}

关于c# - 当 xamarin 表单中的条目为空时,是否有一种方法可以在按下删除时触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com