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 和其他示例,它们都包含调用,仅当您不使用情节提要时才需要。
我正在与一位设计师合作,他为我的 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 和其他示例,它们都包含调用,仅当您不使用情节提要时才需要。