2014-09-17 12 views
5

Voglio implementare lo scorrimento per eliminare la funzionalità in Xamrin Forms, per il quale ho provato quanto segue.Form Xamrin: scorri per eliminare (gesture) in ListView

  1. Ha scritto un renderer personalizzato per la visualizzazione elenco e nel "OnElementChanged" del renderer sono in grado di accedere al comando binded al "CustomListView" e sono in grado di aggiungere questo comando al gesto Swipe come aggiunto di seguito .

    swipeGestureRecognizer = new UISwipeGestureRecognizer (() => { 
         if (command == null) { 
          Console.WriteLine ("No command set"); 
          return;} 
    
         command.Execute (null); 
        }); 
    

Tuttavia sto avendo difficoltà nell'accesso al riga specifica (riga fregato), in modo che io potessi fare un pulsante visibile/nascosta sulla riga strisciato nella vista elenco. Per favore, potresti consigliarti un modo per implementare lo stesso?

+0

vorrei aggiungere il gesto di ItemTemplate o UITableCell invece. – SKall

+0

Hai raggiunto questo anche per Android? –

risposta

4

Si potrebbe fare qualcosa di simile:

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; 
    } 

La chiave è SwipeRecogniserDelegate. la sua implementato in questo modo:

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; 
    } 
} 
4

Swipe per eliminare è ora integrato in Xamarin Froms ListViews utilizzando un ContextAction. Ecco il tutorial di base su come farlo. È molto facile da implementare.

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/listview/

+1

L'implementazione dei moduli xamarin copre il caso d'uso più semplice. FYI: sfortunatamente non è possibile scorrere a destra con l'implementazione dei moduli xamarin. Sei anche bloccato con le voci di menu più basilari che non puoi davvero personalizzare (ad esempio seleziona un font diverso per il testo), il che significa che dovrai iniziare a guardare i renderer personalizzati quasi immediatamente. – wislon

+0

Sì, ho trovato che la documentazione in particolare è molto carente. – Sam07

Problemi correlati