Xamarin CollectionViewCell没有从storyboard实例化

时间:2015-04-01 15:28:19

标签: xamarin.ios xamarin uicollectionview uistoryboard uicollectionviewcell

我正在与我的Xamarin项目故事板上的样式元素设计师合作。我无法在代码中引用他精心放置的元素。所有出口都已创建,但在UICollectionViewCell中,UILabels等未实例化。以下是来自简单测试应用程序的代码,用于演示问题。

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的界面生成器,但它没有什么区别。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

由故事板驱动的集合视图的示例非常稀少,但是我发现this one并且一丝不苟地对其进行了戏弄,直到我发现它不包括为单元格注册类的调用。所以,删除这一行:

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

突然一切都按预期工作。

我正在关注this recipe和其他所有包含调用的示例,只有在您不使用故事板时才需要这些示例。