2016-07-14 50 views
0

我有一個UIViewController裏面的tableview。我也有一些動態數據,我想加載到這個tableview。我到目前爲止嘗試了兩種方法:Monotouch - UIViewController裏面的tableview:override函數不會被調用

  1. 我在此UIViewController中創建了一個嵌套的私有類,該類繼承自UITableViewSource。然後,我在ViewDidLoad中創建了這個類的一個新實例,並將其分配給我的表視圖的Source屬性。

對於此選項,調用覆蓋函數。但是,我在ViewWillAppear中動態加載列表,因此此時的數據源爲空。

我試圖在ViewWillAppear中創建嵌套類的新實例,但是當我這樣做時,不會調用覆蓋函數。如果我在ViewDidLoad中這樣做,他們只會被調用。

  1. 我試過的另一個選項是在我的UIViewController類中實現了IUITableViewDelegateIUITableViewDataSource。然後在我的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); 

     } 

    } 

回答

1

當UITableView的在抽籤加載到層,它會加載DATAS就像當viewDidLoad中被調用。但tableView的數據源被設置在viewWillAppear中,這太遲了。所以你需要在設置datasource或在viewDidLoad函數中設置數據源之後調用reloadData()。

+0

這實際上工作。我在ViewWillAppear()中添加了一個對'tableView.ReloadData()'的調用。此時我可以訪問加載的數據。謝謝。 – naffie