0

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

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

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

4

1 回答 1

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

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

于 2013-02-19T23:57:32.780 回答