我正在尝试在键盘上单击完成后在编辑器中保存一些值,因为我使用了编辑器的Completed
事件但这是在点击视图中的任何位置时调用{{1事件。怎么避免这个?
Unfocused
CustomEditorClass如下:
<controls:CustomEditor Keyboard="Default"
ReturnKeyType="Next"
TextChanged="Comment_Changed"
Completed="OnDoneClicked"
VerticalOptions="StartAndExpand"
HorizontalOptions="FillAndExpand"
Text="{Binding QuestionComment}">
<controls:CustomEditor.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="12"
Android="12"
WinPhone="30" />
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="13"
Android="13"
WinPhone="40" />
</OnIdiom.Tablet>
</OnIdiom>
</controls:CustomEditor.FontSize>
</controls:CustomEditor>
事件如下:
public const string ReturnKeyPropertyName = "ReturnKeyType";
public CustomEditor() { }
public static readonly BindableProperty ReturnKeyTypeProperty = BindableProperty.Create(
propertyName: ReturnKeyPropertyName,
returnType: typeof(ReturnKeyTypes),
declaringType: typeof(CustomEditor),
defaultValue: ReturnKeyTypes.Done );
public ReturnKeyTypes ReturnKeyType
{
get { return (ReturnKeyTypes)GetValue(ReturnKeyTypeProperty); }
set { SetValue(ReturnKeyTypeProperty, value); }
}
public enum ReturnKeyTypes : int
{
Default,
Go,
Google,
Join,
Next,
Route,
Search,
Send,
Yahoo,
Done,
EmergencyCall,
Continue
}
答案 0 :(得分:0)
请参阅documentation,这是预期的行为
iOS(取消对焦编辑器或按“完成”会触发事件)。 Android / Windows Phone(取消焦点编辑器触发事件)
我已经检查了一些信使应用程序(iOS),但它们根本没有键盘上的done
按钮,它们除了输入控件外还提供了一个发送按钮。
根据您尝试实现的目标,我完全抛弃了键盘上的done
按钮,并依赖UI上的某种视图,用于此目的。这是平台相关的行为无论如何,Android根本不支持它,AFAIK。为了摆脱完成按钮,您必须实现自定义渲染器并将原始控件的InputAccessoryView
设置为null
(请参阅here)
[assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]
namespace ProjectName.iOS
{
public class CustomEditorRenderer : EditorRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs e)
{
base.OnElementChanged(e);
this.Control.InputAccessoryView = null;
}
}
}
如果您真的想要发送按钮,可以使用自定义渲染器创建Editor
的衍生产品,创建InputAccessoryView
并在您的自定义{SendPressed
上引发Editor
事件1}}按下InputAccessoryView
时。但请记住,这对于Android来说可能不。