我在UIViewController中有一个tableview。我也有一些动态数据,我想加载到这个tableview。到目前为止,我尝试了两种方法:
对于此选项,将调用覆盖功能。但是,我正在ViewWillAppear
中动态加载列表,因此此时的数据源为空。
我尝试在ViewWillAppear中创建嵌套类的新实例,但是在执行此操作时不会调用覆盖函数。如果我在ViewDidLoad
中执行此操作,则只会调用它们。
IUITableViewDelegate
和IUITableViewDataSource
。然后在我的ViewDidLoad中将“this”分配给我的表视图的WeakDelegate和WeakDataSource属性。我面临的第二个选择面临的挑战是:我一直收到这个错误:
[HomePageController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x185ce440
我已将此导出属性添加到该函数中,但它无法解决问题:
[Export ("tableView:numberOfRowsInSection:")]
public nint RowsInSection (UITableView tableView, nint section)
{
return 1;
}
我更喜欢第一个选项,但为什么我在加载数据后无法在ViewWillAppear中初始化类?我需要在这里调用它,因为ViewDidLoad只被调用一次。
这就是我所做的:
public async override void ViewWillAppear (bool animated)
{
base.ViewWillAppear (animated);
try {
LoadingOverlay loadingOverlay = new LoadingOverlay (UIScreen.MainScreen.Bounds, "Loading...");
this.View.AddSubview (loadingOverlay);
await FetchAllData ();
loadingOverlay.Hide ();
if (tableViewNotice != null) {
if(allData != null)
{
if(allData.Count > 0)
{
homeDataSource = new HomeDataSource(this);
tableViewNotice.Source = homeDataSource;
}
}
}
} catch (Exception ex) {
Console.WriteLine (ex.Message + ex.StackTrace);
}
}
答案 0 :(得分:1)
当UITableView在绘图时加载到图层时,它将加载数据,就像调用viewDidLoad时一样。但tableView的数据源是在viewWillAppear中设置的,为时已晚。所以你需要在viewDidLoad函数中设置数据源或设置数据源后调用reloadData()。