Ios 来自IB的原型单元的引用

Ios 来自IB的原型单元的引用,ios,uitableview,xamarin.ios,Ios,Uitableview,Xamarin.ios,我正在用MonoTouch中的故事板做iOS项目 我有UITableView的自定义类(myCustomTableFoo),并在IB中指定了该类的原型单元格。然后我想以编程方式实例化该类。糟糕的是,它缺少原型单元格,我不知道如何将原型单元格插入到以编程方式创建的表对象中 我有一个故事板,我想在所有继承的表类中使用IB中的原型单元格。我认为在这种情况下,monotuch可能与Objective-c非常相似 您可以使用 this._tableView.RegisterClassForCellReus

我正在用
MonoTouch
中的故事板做
iOS
项目

我有UITableView的自定义类(
myCustomTableFoo
),并在IB中指定了该类的原型单元格。然后我想以编程方式实例化该类。糟糕的是,它缺少原型单元格,我不知道如何将原型单元格插入到以编程方式创建的表对象中

我有一个故事板,我想在所有继承的表类中使用
IB
中的原型单元格。我认为在这种情况下,
monotuch
可能与Objective-c非常相似

您可以使用

this._tableView.RegisterClassForCellReuse(typeof(MyCell), new NSString("MyReuseIdentifier"));
然后,您可以使用

this._tableView.DequeueReusableCell("MyReuseIdentifier");
单元格将自动实例化。您确实需要使用
[register(“MyCell”)
注册您的类,并且它应该有一个类似

public MyCell(IntPtr handle) : base(handle) {

}
但有一件事,我认为你不能重用你在故事板中定义的单元格。如果你想在不同的TableView实例中重用相同的单元格,你可以为你的单元格创建一个唯一的Nib,然后像这样做就可以了:

public partial class MyCell : UITableViewCell {

    private MySuperCellView _mySuperNibView;

    public MyCell (IntPtr handle) : base (handle) {

    }

    private void checkState() {
        // Check if this is the first time the cell is instantiated
        if (this._mySuperNibView == null) {
            // It is, so create its view
            NSArray array = NSBundle.MainBundle.LoadNib("NibFileName", this, null);
            this._mySuperNibView = (MySuperCellView)Runtime.GetNSObject(array.ValueAt(0));
            this._mySuperNibView.Frame = this.Bounds;
            this._mySuperNibView.LayoutSubviews();

            this.AddSubview(this._mySuperNibView);
        }
    }

    public object cellData {
        get { return this._mySuperNibView.cellData; }
        set {
            this.checkState();
            this._mySuperNibView.cellData = value;
        }
    }
}

在这里,我使用的是一个在外部Nib上定义的通用视图。如果数据尚未实例化,我会在将其输入单元格时手动实例化它。这通常发生在单元格第一次实例化时。

第一种方法不起作用。虽然它不是在RegisterClassForCell之后抛出exeption,而是在真正的proto之后抛出exeption键入cell not instanced。我将尝试第二个建议。使用以下方法完成第二个建议:。谢谢!