Android与iOS平台自定义渲染器实现SignaturePad空签名保存问题求助
解决SignaturePad未签名仍生成空白图片的问题
你使用的这款自定义SignaturePad渲染器库本身没有直接提供判断是否已完成签名的布尔属性,但可以通过以下两种方式实现需求:
利用原生控件状态实现绑定属性
各平台的原生签名控件自带判断是否为空的能力,你可以在自定义渲染器中新增一个可绑定属性HasSignature,将原生控件的状态映射到这个属性上:- Android端渲染器实现:
public static readonly BindableProperty HasSignatureProperty = BindableProperty.Create(nameof(HasSignature), typeof(bool), typeof(SignaturePad), false); public bool HasSignature { get => (bool)GetValue(HasSignatureProperty); set => SetValue(HasSignatureProperty, value); } protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (Control != null) { HasSignature = !Control.IsEmpty; } } - iOS端渲染器实现:
public static readonly BindableProperty HasSignatureProperty = BindableProperty.Create(nameof(HasSignature), typeof(bool), typeof(SignaturePad), false); public bool HasSignature { get => (bool)GetValue(HasSignatureProperty); set => SetValue(HasSignatureProperty, value); } protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (Control != null) { HasSignature = Control.Signature != null; } }
完成后,你在Forms层的保存按钮点击事件中,先检查
SignaturePad的HasSignature属性,只有当它为true时再执行保存图片的逻辑。- Android端渲染器实现:
监听签名绘制事件标记状态
在各平台渲染器中监听签名的绘制事件,维护一个布尔变量记录是否有过签名操作:- Android端:监听
OnSignatureStarted和OnSignatureCompleted事件,当触发时将标记设为true;如果调用了清除签名的方法,将标记设为false。 - iOS端:监听
SignatureDidChange事件,当Control.Signature不为null时标记为true,否则为false。
同样将这个标记暴露为Forms控件的属性,供保存逻辑判断使用。
- Android端:监听
内容的提问来源于stack exchange,提问作者Dev Xam
相关产品推荐
相关产品推荐

