在我正在工作的應用程序中,需要定製UITableView節頭和頁腳。爲此,我想創建一個可以與綁定和我們的邏輯結合使用的自定義控件。使用MvvmCross和XIB自定義UITableViewHeaderFooterView?
對於我創建了一個XIB並增加了支持類,看起來像下面這樣:
public partial class HeaderFooterView : MvxTableViewHeaderFooterView
{
public static readonly NSString Key = new NSString("HeaderFooterView");
public static readonly UINib Nib = UINib.FromName("HeaderFooterView", NSBundle.MainBundle);
public HeaderFooterView(IntPtr handle) : base(handle)
{
}
public override void AwakeFromNib()
{
base.AwakeFromNib();
//var binding = this.CreateBindingSet<HeaderFooterView, TableViewSection>();
//binding.Apply();
}
}
的MvxTableViewHeaderFooterView
其實是一個相當簡單的類,與IMvxBindable
相結合的股票UITableViewHeaderFooterView
。沒有什麼花哨。
但是出於某種原因,即使我把它註冊到TableViewSource構造函數中正確:
tableView.RegisterNibForHeaderFooterViewReuse(HeaderFooterView.Nib, HeaderFooterView.Key);
,做返回頭本身只有正確的方法:
public override UIView GetViewForHeader(UITableView tableView, nint section)
{
return tableView.DequeueReusableHeaderFooterView(HeaderFooterView.Key);
}
該應用程序與死亡出現以下錯誤:
2017-07-12 16:56:40.517 MyAppiOS[3833:58706] *** Assertion failure in -[UITableView _dequeueReusableViewOfType:withIdentifier:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.7.47/UITableView.m:6696
2017-07-12 16:56:40.528 MyAppiOS[3833:58706] WARNING: GoogleAnalytics 3.17 void GAIUncaughtExceptionHandler(NSException *) (GAIUncaughtExceptionHandler.m:48): Uncaught exception: invalid nib registered for identifier (HeaderFooterView) - nib must contain exactly one top level object which must be a UITableViewHeaderFooterView instance
我的NIB實際上包含一個roo t對象,即根視圖本身,該對象被設置爲HeaderFooterView
類(其源自MvxTableViewHeaderFooterView
,其依次源自UITableViewHeaderFooterView
)。但它聲稱沒有UITableViewHeaderFooterView實例。
爲什麼它不能正常工作?
我相信你必須爲頁腳/標題分配一個估計的高度,否則它將無法正確顯示。 – Digitalsa1nt
我的問題不是它不呈現,而是當我嘗試調用'DequeueReusableHeaderFooterView'時,應用程序崩潰。 – fonix232