我正在与我的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的界面生成器,但它没有什么区别。任何帮助将不胜感激。
答案 0 :(得分:3)
由故事板驱动的集合视图的示例非常稀少,但是我发现this one并且一丝不苟地对其进行了戏弄,直到我发现它不包括为单元格注册类的调用。所以,删除这一行:
CollectionView.RegisterClassForCell (typeof(CardCell), cardCellId);
突然一切都按预期工作。
我正在关注this recipe和其他所有包含调用的示例,只有在您不使用故事板时才需要这些示例。