我有一個UIViewController裏面的tableview。我也有一些動態數據,我想加載到這個tableview。我到目前爲止嘗試了兩種方法:Monotouch - UIViewController裏面的tableview:override函數不會被調用
- 我在此UIViewController中創建了一個嵌套的私有類,該類繼承自UITableViewSource。然後,我在ViewDidLoad中創建了這個類的一個新實例,並將其分配給我的表視圖的Source屬性。
對於此選項,調用覆蓋函數。但是,我在ViewWillAppear
中動態加載列表,因此此時的數據源爲空。
我試圖在ViewWillAppear中創建嵌套類的新實例,但是當我這樣做時,不會調用覆蓋函數。如果我在ViewDidLoad
中這樣做,他們只會被調用。
- 我試過的另一個選項是在我的UIViewController類中實現了
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);
}
}
這實際上工作。我在ViewWillAppear()中添加了一個對'tableView.ReloadData()'的調用。此時我可以訪問加載的數據。謝謝。 – naffie