我需要一個具有不同單元的自定義iOS TableView,具體取決於項目類型。看起來很簡單,只需在TableViewSource構造函數中定義佈局,這是MvxTableViewSource的子項。註冊碰巧是這樣的:MvxTableViewCell加載一個空視圖
public TableViewSource(UITableView tableView, List<ItemHolder> sections) : base(tableView) {
tableView.RegisterClassForCellReuse(typeof(MyCell), "MyCellId");
[Registering further types here]
}
處理的部分我已經創建了一個定義了部分項目的ItemHolder和部分頁眉/頁腳。這部分工作得很好。
在GetOrCreateCellFor,我使用基於給定項的類型的默認DequeueReusableCell
。但是,如果我如上所述註冊單元格,將繪製一個空單元格。
我的小區使用XIB +支持類(基於MvxTableViewCell
)的方式,理論上應該能正常運行。如果我使用它的筆尖財產,並使用RegisterNibForCellReuse
,內容被繪製(但行高度是錯誤的,和有約束力的情況不會發生,因爲它是在支持類中定義)。
類看起來是這樣的:
public partial class MyCell : MvxTableViewCell
{
public static readonly NSString Key = new NSString("MyCell");
public static readonly UINib Nib = UINib.FromName("MyCell", NSBundle.MainBundle);
protected MyCell(IntPtr handle) : base(handle)
{
this.DelayBind(() =>
{
var binding = this.CreateBindingSet<MyCell, object>();
binding.Bind(this.TextView.Text).To(vm => vm.GetType().Name).WithConversion(new StringFormatConverter(), "Unknown cell type: {0}");
binding.Apply();
});
}
public static MyCell Create()
{
return (MyCell)Nib.Instantiate(null, null)[0];
}
}
在XIB我有一個UILabelView設置了自動版式,即有一個叫做TextView的一個出口。
所以基本上如果我通過類本身添加它,它根本不起作用。如果我使用Nib,那麼佈局是可行的,但是沒有綁定,datacontext等,在技術上我的邏輯已經消失了。
我在這裏做錯了什麼,或者這甚至不應該工作?
我的標籤有一個默認的調試值,所以我應該看到至少。但由此產生的細胞是完全空的。 – fonix232
我試着將綁定移動到AwakeFromNib,但仍繪製相同的空單元格。檢查返回的單元格,它們確實是MyCell類型,但它們不會被繪製。 – fonix232
好的,我糾正了。在用'RegisterNibForCellReuse'替換'RegisterClassForCellReuse'後,現在它工作正常。顯然iOS邏輯是完全顛倒的(Nib,即UI參考後臺代碼,而不是代碼參考UI)。 – fonix232