Monotouch - UIViewController里面的tableview:不会调用覆盖函数

时间:2016-07-14 17:39:07

标签: ios uitableview uiviewcontroller xamarin.ios

我在UIViewController中有一个tableview。我也有一些动态数据,我想加载到这个tableview。到目前为止,我尝试了两种方法:

  1. 我在这个UIViewController中创建了一个嵌套的私有类,它继承自UITableViewSource。然后我在ViewDidLoad中创建了这个类的新实例,并将其分配给我的表视图的Source属性。
  2. 对于此选项,将调用覆盖功能。但是,我正在ViewWillAppear中动态加载列表,因此此时的数据源为空。

    我尝试在ViewWillAppear中创建嵌套类的新实例,但是在执行此操作时不会调用覆盖函数。如果我在ViewDidLoad中执行此操作,则只会调用它们。

    1. 我尝试的另一个选项是在我的UIViewController类中实现IUITableViewDelegateIUITableViewDataSource。然后在我的ViewDidLoad中将“this”分配给我的表视图的WeakDelegate和WeakDataSource属性。
    2. 我面临的第二个选择面临的挑战是:我一直收到这个错误:

      [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 个答案:

答案 0 :(得分:1)

当UITableView在绘图时加载到图层时,它将加载数据,就像调用viewDidLoad时一样。但tableView的数据源是在viewWillAppear中设置的,为时已晚。所以你需要在viewDidLoad函数中设置数据源或设置数据源后调用reloadData()。