不确定您实际上想在BecomeFirstResponder 中做什么,但无需创建UITextField 的自定义子类,您可以创建自定义UITextFieldDelegate 并将其分配给UITextField.Delegate属性。
如果您试图阻止该字段成为第一响应者,您可以使用UITextFieldDelegate.ShouldBeginEditing 返回false,此方法在BecomeFirstResponder 被调用之前调用)并且UITextFieldDelegate.EditingStarted 在@987654331 之后调用@ 被调用:
public class TextFieldDelegate : UITextFieldDelegate
{
public override bool ShouldBeginEditing(UITextField textField)
{
return base.ShouldBeginEditing(textField);
}
public override void EditingStarted(UITextField textField)
{
base.EditingStarted(textField);
}
}
参考以下链接查看UITextFieldDelegate的所有方法调用的完整顺序/流程:
参考:https://developer.apple.com/reference/uikit/uitextfielddelegate
更新:
这是我如何执行SecureTextEntry 切换/编辑时没有清除字段:
1) 自定义UITextFieldDelegate:
public class SecureTextFieldDelegate : UITextFieldDelegate
{
public override void EditingStarted(UITextField textField)
{
if (textField.SecureTextEntry != true)
{
var text = textField.Text;
textField.DeleteBackward();
textField.InsertText(text);
}
}
}
2) 设置你的 UITextField:
uiTextField.Delegate = new SecureTextFieldDelegate();
3) Handle Touch of toggle 和/或物理键盘字段 Tabbing:
uiSwitch.ValueChanged += (object sender, EventArgs e) =>
{
uiTextField.SecureTextEntry = !uiTextField.SecureTextEntry;
if (uiTextField.SecureTextEntry == true)
{
var text = uiTextField.Text;
uiTextField.DeleteBackward();
uiTextField.InsertText(text);
}
};
UITextField.Text 现在应该永远不会清除,除非用户执行 删除