You can do something like this:
protected override void OnElementChanged (ElementChangedEventArgs<ListView> e) { base.OnElementChanged (e); var swipeDelegate = new SwipeRecogniserDelegate (); swipeGestureRecognizer = new UISwipeGestureRecognizer { Direction = UISwipeGestureRecognizerDirection.Left, Delegate = swipeDelegate }; swipeGestureRecognizer.AddTarget (o => { var startPoint = swipeDelegate.GetStartPoint (); Console.WriteLine (startPoint); var indexPath = this.Control.IndexPathForRowAtPoint(startPoint); if(listView.SwipeCommand != null) { listView.SwipeCommand.Execute(indexPath.Row); } }); this.Control.AddGestureRecognizer (swipeGestureRecognizer); this.listView = (SwipableListView)this.Element; }
SwipeRecogniserDelegate key. it is implemented like this:
public class SwipeRecogniserDelegate : UIGestureRecognizerDelegate { PointF startPoint; public override bool ShouldReceiveTouch (UIGestureRecognizer recognizer, UITouch touch) { return true; } public override bool ShouldBegin (UIGestureRecognizer recognizer) { var swipeGesture = ((UISwipeGestureRecognizer)recognizer); this.startPoint = swipeGesture.LocationOfTouch (0, swipeGesture.View); return true; } public PointF GetStartPoint () { return startPoint; } }
source share