简体   繁体   English

Xamarin表单绑定在iOS渲染器中不起作用

[英]Xamarin forms bindings not working in ios renderer

I wrote custom control: 我写了自定义控件:

public class ExtendedImage : View
    {
        public string SourceStart { get; set; }
        public string SourceComplete { get; set; }
    }

When I use it on my pcl project, I add to him tapGestureRecognizer. 当我在pcl项目上使用它时,我向他添加了tapGestureRecognizer。 This recognizer has bindable command: 该识别器具有可绑定的命令:

var image = new ExtendedImage()
    {
        SourceStart = "im1.png"),
        SourceComplete = "im2.png"),
    };
var tap = new TapGestureRecognizer();
tap.SetBinding(TapGestureRecognizer.CommandProperty, "imageCommand");
image.GestureRecognizers.Add(tap);

And I have ImageRenderer: 我有ImageRenderer:

public class iOSImageRenderer : ViewRenderer<ExtendedImage, UIImageView>
    {
        UIImageView image { get; set; }

        string SourceStart { get; set; }

        string SourceComplete { get; set; }

        protected override void OnElementChanged(ElementChangedEventArgs<ExtendedImage> e)
        {
            base.OnElementChanged(e);

            if(e.OldElement != null || this.Element == null)
                return;

            SourceStart = Element.SourceStart;
            SourceComplete = Element.SourceComplete;

            image = new UIImageView(UIImage.FromFile(SourceStart));
            image.UserInteractionEnabled = true;

            SetNativeControl(image);
        }

        public override void TouchesBegan(NSSet touches, UIEvent evt)
        {
            base.TouchesBegan(touches, evt);
            UITouch touch = touches.AnyObject as UITouch;
            if(touch != null)
            {
                image.Image = UIImage.FromFile(SourceComplete);
            }
        }

        public override void TouchesEnded(NSSet touches, UIEvent evt)
        {
            base.TouchesBegan(touches, evt);
            UITouch touch = touches.AnyObject as UITouch;
            if(touch != null)
            {
                image.Image = UIImage.FromFile(SourceStart);
            }
        }
}

And bindable recognizer not working for this solution. 并且可绑定识别器不适用于此解决方案。 I have the same renderer for windowsPhone, and it works perfectly. 我有相同的WindowsPhone渲染器,并且效果很好。 For android I don't check yet. 对于android,我暂不检查。 How I can bind this command in ios renderer, or how I can fix this issue? 如何在ios渲染器中绑定此命令,或者如何解决此问题?

I suspect your TouchesBegan / TouchesEnded gets in the way of the UITapGestureRecognizer . 我怀疑您的TouchesBegan / TouchesEnded妨碍了UITapGestureRecognizer

You should start by fixing your TouchesEnded implementation so it calls base.TouchesEnded instead of base.TouchesBegan . 您应该首先修复TouchesEnded实现,以便它调用base.TouchesEnded而不是base.TouchesBegan

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM