在我正在工作的应用程序中,需要定制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