Xamarin CollectionViewCell 未从情节提要中实例化

Xamarin CollectionViewCell not instantiating from storyboard

我正在与一位设计师合作,他为我的 Xamarin 项目情节提要设计元素样式。我无法在代码中引用他精心放置的元素。所有出口都已创建,但在 UICollectionViewCell 中 UI 标签等未实例化。这是来自一个简单测试应用程序的代码,用于演示该问题。

Xamarin 生成的代码隐藏:

[Register ("CardCell")]
partial class CardCell
{
    [Outlet]
    [GeneratedCode ("iOS Designer", "1.0")]
    UILabel txtName { get; set; }

    void ReleaseDesignerOutlets ()
    {
        if (txtName != null) {
            txtName.Dispose ();
            txtName = null;
        }
    }
}

我尝试设置导致崩溃的 UI 属性:

public partial class CardCell : UICollectionViewCell
{
    public CardCell (IntPtr handle) : base (handle)
    {
    }


    public void Update(string name)
    {
        txtName.Text = name;  // throws exception here, because textName is null
    }
}

具有委托方法的视图控制器:

public partial class TestCollectionController : UICollectionViewController
{
    static NSString cardCellId = new NSString ("cardcell");

    string[] cards = new string[] {"Red", "Green", "White", "Blue", "Pink", "Yellow"};

    public TestCollectionController (IntPtr handle) : base (handle)
    {
    }

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

        CollectionView.RegisterClassForCell (typeof(CardCell), cardCellId);

    }

    public override nint NumberOfSections (UICollectionView collectionView)
    {
        return 1;
    }

    public override nint GetItemsCount (UICollectionView collectionView, nint section)
    {
        return (nint)cards.Length;
    }

    public override UICollectionViewCell GetCell (UICollectionView collectionView, NSIndexPath indexPath)
    {
        CardCell cell = (CardCell)collectionView.DequeueReusableCell (cardCellId, indexPath);

        var card = cards [indexPath.Row];

        cell.Update(card);

        return cell;
    }
}

我已经尝试了 Xamarin iOS Designer 和 Xcode 的 Interface Builder,但没有什么区别。任何帮助将不胜感激。

故事板驱动的集合视图的例子非常少,但我找到了 this one 并仔细研究了它,直到我发现它不包括为 class 注册一个调用细胞。所以,删除这一行:

CollectionView.RegisterClassForCell (typeof(CardCell), cardCellId);

突然间一切都按预期运行。

我正在关注 this recipe 和其他示例,它们都包含调用,仅当您不使用情节提要时才需要。