编辑器的Complte事件表现得像Unfocussed事件

时间:2018-04-25 00:27:44

标签: xamarin xamarin.forms editor

我正在尝试在键盘上单击完成后在编辑器中保存一些值,因为我使用了编辑器的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
}

1 个答案:

答案 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来说可能