MonoTouch LongPressGesture

En esta ocación les presento como capturar el evento de LongPress sobre un UITableView en MonoTouch y C#.

En lo personal, este evento lo utilize para eliminar filas de un UITableView, de un iPad de tal manera que cuando el usuario mantenía presionado una fila, les aparecia un diálogo con la opción de eliminar dicha fila.

Pues bien, vamos al grano..

Ya sea en el método FinishedLaunching() o en ViewDidLoad() creamos el GestureRecognizer, lo configuramos y se lo asignamos a nuestro UITableView en cuestión.


UILongPressGestureRecognizer gesture = new UILongPressGestureRecognizer(this, new MonoTouch.ObjCRuntime.Selector("LongPressGesture"));
gesture.MinimumPressDuration = 1.0f;
gesture.Delegate = new LongPressGestureDelegate();
Table.AddGestureRecognizer(gesture);

Posteriormente creamos el método del evento y el método que lo invoca


protected void OnLongPressGesture(UILongPressGestureRecognizer aRecogniser)
{
if(aRecogniser.State == UIGestureRecognizerState.Began)
{
PointF point = aRecogniser.LocationInView(Table);
NSIndexPath path = Table.IndexPathForRowAtPoint(point);
if(path != null )
{
UIActionSheet sheet = new UIActionSheet("Desea Eliminar la Fila?");
sheet.AddButton("SI eliminar");
sheet.AddButton("NO eliminar");
sheet.AddButton("Cancelar");
sheet.CancelButtonIndex = 2;
sheet.ShowFrom(Table.RectForRowAtIndexPath(path), Table, true);
sheet.Clicked += delegate (object sender, UIButtonEventArgs e)
{
switch(e.ButtonIndex)
{
case 0:
// Codigo para eliminar la fila, llamada al metodo de eliminar dentro del DataSource de su UITableView
break;
default:
break;
}
};
}
}
}
[Export("LongPressGesture")]
private void LongPressGesture(UILongPressGestureRecognizer aRecogniser)
{
OnLongPressGesture(aRecogniser);
}

Por último, al final de nuestra clase principal creamos el manejador para nuestro GestureRecognizer


public class LongPressGestureDelegate : UIGestureRecognizerDelegate
{
public override bool ShouldReceiveTouch(UIGestureRecognizer aRecogniser, UITouch aTouch)
{
return true;
}
}

Espero les sea de utilidad, si alguien requiere el código funcional (proyecto de MonoDevelop) solo pídalo y con gusto se lo proporciono.

Saludos y gracias la visita.

Leave a reply

required

required

optional