来自IB的原型细胞的参考

时间:2013-02-19 20:00:19

标签: ios uitableview xamarin.ios

我正在使用iOS中的故事板进行MonoTouch项目。

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用

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;
        }
    }
}

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