3

我想制作没有 nib 文件的 MvxTableViewCell,但我在 stackoverflow、github 和 google 中搜索,我无法手动制作 MvxTableViewCell。

我试过这样的代码,

namespace KittenView.Touch
{
    public partial class KittenCell : MvxTableViewCell
    {
        public static readonly NSString Key = new NSString ("KittenCell");

        private readonly MvxImageViewLoader _imageViewLoader;
        MonoTouch.UIKit.UIImageView MainImage { get; set; }
        MonoTouch.UIKit.UILabel NameLabel { get; set; }
        MonoTouch.UIKit.UILabel PriceLabel { get; set; }

        public KittenCell () : base ()
        {
            this.Frame = new RectangleF(0f,0f,100f,120f);
            MainImage = new UIImageView (new RectangleF(0f,0f,100f,100f));
            NameLabel = new UILabel (new RectangleF (0f, 80f, 100f, 20f));
            PriceLabel = new UILabel (new RectangleF (0f, 100f, 100f, 20f));
            Add (MainImage);
            Add (NameLabel);
            Add (PriceLabel);

            _imageViewLoader = new MvxImageViewLoader(() => this.MainImage);

            this.DelayBind (() => {
                var set = this.CreateBindingSet<KittenCell, Kitten>();
                set.Bind(NameLabel).To (kitten => kitten.Name);
                set.Bind(PriceLabel).To(kitten => kitten.Price);
                set.Bind(_imageViewLoader).To (kitten => kitten.ImageUrl);
                set.Apply ();
            });

            this.Transform = CGAffineTransform.MakeRotation ((float)Math.PI / 2.0f);
        }

        public static KittenCell Create ()
        {
            return new KittenCell ();
        }
    }
}  

但是这段代码在执行阶段出现异常,说

SetValue:forUndefinedKey:]this calss in not key value coding-compliant for key MainImage。

在 AppDelegate.cs 的 window.MakeKeyAndVisible() 中。

如何在没有 nib 的情况下使用 MvxTableViewCell?

问候,

高黑

4

1 回答 1

2

最简单的方法是使用RegisterClassForCell表格视图注册您的单元格,DequeueReusableCell然后再创建或重用单元格。

为了允许 UIKit 在 dequeue 调用中使用此方法创建此类的实例,那么我认为您需要添加;

  • [Register("KittenCell")]类前面的一个属性 - MonoTouch 使用此属性告诉 ObjectiveC 运行时有关此托管类的信息 - 它允许从 ObjectiveC 创建此托管类的实例,

  • 一个构造函数,它接受一个(IntPtr handle)传递给base(handle)构造函数的参数。此构造函数用于允许托管 C# 对象与底层非托管 UIKit 对象一起创建。

如果您添加这 2 个项目,我相信您的单元格将被创建。此外,如果您切换到更简单的RegisterClassForCellAPI,那么我认为您可以删除无参数构造函数和静态Create方法。

于 2013-07-23T02:27:44.430 回答