Home > OS >  How to read cell value long press gesture on table cell in xamarin.ios?
How to read cell value long press gesture on table cell in xamarin.ios?

Time:12-28

I have Tableview with longpress cell.

I can't read the data inside the cell which have been long pressed.

rowselected() method is not the right way because I must select cell first. I didn't want to select cell first.

This is my table adapter class:

internal class AbsetAdapterClass : UITableViewSource
{

    private List<benood2.AbsentClass> absentList;

    public AbsetAdapterClass(List<benood2.AbsentClass> absentList)
    {
        this.absentList = absentList;
    }

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        var cell = (TableClass)tableView.DequeueReusableCell("cell_id", indexPath);
        var AbsentDay = absentList[indexPath.Row];

        var longPressGesture = new UILongPressGestureRecognizer(LongPressMethod);
        cell.AddGestureRecognizer(longPressGesture);

        cell.UpdateCell(AbsentDay);
        return cell;
    }

    public override nint RowsInSection(UITableView tableview, nint section)
    {

        return absentList.Count;
    }


    public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
    {
        PublicClass.ReadCellValue = "";

        var GetCellValue = absentList[indexPath.Row].BandValue;

        tableView.DeselectRow(indexPath, true);
    }
    
    
    void LongPressMethod(UILongPressGestureRecognizer gestureRecognizer)
    {
        
        if (gestureRecognizer.State == UIGestureRecognizerState.Began)
        {
            Toast.MakeToast("I want to read the cell data ").SetTitle(PublicClass.ReadCellID.ToString()).SetDuration(ToastDuration.Regular).Show();
        }
    }
}

I can't get the long press cell data

CodePudding user response:

You could attach LongPressGesture to the UITableView instead of the UITableViewCell.

You could try the following code (Note: i made my demo based on the Xamarin.iOS official samples):

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    table = new UITableView(new CGRect(0, 0, width, height));
    ...
    // add longPressGesture to the tableView
    var longPressGesture = new UILongPressGestureRecognizer(LongPressMethod);
    table.AddGestureRecognizer(longPressGesture);
    ...

}

Then for LongPressMethod:

void LongPressMethod(UILongPressGestureRecognizer gestureRecognizer)
{
    var p = gestureRecognizer.LocationInView(table);

    var indexPath = table.IndexPathForRowAtPoint(p);

    if (indexPath == null)
    {
        Console.WriteLine("Long press on table view but not on a row.");
    }
    else if (gestureRecognizer.State == UIGestureRecognizerState.Began)
    {
        Console.WriteLine("Long press on {0} row", indexPath.Row);
        //you could get the selectedItem through the Row index

    }
}

For more info, you could refer to Working with Tables and Cells in Xamarin.iOS.

Hope it works for you.

  • Related