UICollectionView Xamarin.iOS,带按钮的自定义单元格

时间:2016-01-23 06:13:38

标签: ios xamarin xamarin.ios uicollectionview

我已经为iOS和Xamarin.iOS阅读了许多针对UICollectionView的教程 每个人都在UICollectionViewCell

中显示了一个相同的示例教程

所需的输出

具有自定义设计的UICollectionViewCell GridView

我做了什么

这是我到目前为止所取得的成绩..请忽略糟糕的设计:P UICollectionView in Xamarin.iOS

问题

当我点击Book按钮时,它会多次触发事件。奇怪的是它不一致,有时只会触发一次两次或一次三次或其他......

代码段

List<MeetingRoom> data = new List<MeetingRoom>();

async public override void ViewDidLoad()
{
    base.ViewDidLoad();

    data = await DashboardServices.getMeetingRooms(DateTime.Now);
    MeetingRoomCollection.WeakDataSource = this;
}

public nint GetItemsCount(UICollectionView collectionView, nint section)
{
    var count = data.Count;
    return count;
}

public UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
{
    var cell = (MeetingRoomCell)collectionView.DequeueReusableCell("cell", indexPath);

    cell.RoomName.Text = data[indexPath.Row].Room_Name;
    cell.Status.Text = data[indexPath.Row].Availability;
    cell.BookButton.Tag = indexPath.Row;
    cell.BookButton.TouchUpInside += Cell_BookButton_TouchUpInside;

    return cell;
}

void Cell_BookButton_TouchUpInside(object sender, EventArgs e)
{
    var x = sender as UIButton;

    Debug.WriteLine("index : {0}, status : {1}", (int)x.Tag, data[(int)x.Tag].Availability);
    this.PerformSegue("segue_bookRoom", this);
}

请提出建议需要采取哪些措施来解决此问题,我们将非常感谢您对可用教程的任何参考。如果Xamarin.iOS暗示那里会很棒..

1 个答案:

答案 0 :(得分:2)

解决此问题的一种可能方法是在订阅之前取消订阅事件,这样可以防止多次调用,尤其是如果此项目在列表中回收。

cell.BookButton.TouchUpInside -= Cell_BookButton_TouchUpInside;
cell.BookButton.TouchUpInside += Cell_BookButton_TouchUpInside;