我正在使用iOS
中的故事板进行MonoTouch
项目。
我有自定义类UITableView(myCustomTableFoo
)并在IB中指定了此类的原型单元格。然后我想以编程方式实例化这个类。它缺少原型单元的坏处,我不知道如何将原型单元格插入到以编程方式创建的表对象中。
我有一个故事板,我想在所有继承的表类中使用IB
中的原型单元格。我认为MonoTouch
在这种情况下可能与Objective-c非常相似。
答案 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时发生。