我目前正在通过练习进行操作,并希望将此Swift功能转换为Xamarin.iOS / C#。我会继续努力,但是如果有人可以提供一些帮助,那将是很棒的。

func setCollectionViewDataSourceDelegate
    <D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>>
    (dataSourceDelegate: D, forRow row: Int) {

    collectionView.delegate = dataSourceDelegate
    collectionView.dataSource = dataSourceDelegate
    collectionView.tag = row
    collectionView.reloadData()
}


我无法解决的是Swift中的方法签名如何转换为C#

让我难过的那张招牌贴在妈妈身上。是:

<D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>>


上下文-表视图的每一行都包含一个水平滚动的集合视图。通过willDisplayCell为表格视图中的每一行调用上述函数。例如:

override func tableView(tableView: UITableView, willDisplayCell cell:UITableViewCell,
forRowAtIndexPath indexPath: NSIndexPath) {
    //code..

    tableViewCell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row)

}


感谢@Alexey。正在更新需要此信息的其他任何人。将此方法放在自定义单元类中的效果很好(我利用了UICollectionViewDelegate / Datasource可用的接口):

    public void SetCollectionViewDataSourceDelegate<T>(T dataSourceDelegate, int row) where T : IUICollectionViewDelegate, IUICollectionViewDataSource
    {
        collectionView.Delegate = dataSourceDelegate;
        collectionView.DataSource = dataSourceDelegate;
        collectionView.Tag = row;
        collectionView.ReloadData ();
    }

最佳答案

void setCollectionViewDataSourceDelegate<D>(
D dataSourceDelegate,
int row)
where D : UICollectionViewDataSource, UICollectionViewDelegate`


不过,我不知道Xamarin Forms中UICollectionViewDataSource, UICollectionViewDelegate类型的等效项。它们应该是某种接口。

10-08 12:27