未调用GetHeightForHeader和GetViewForHeader

时间:2016-01-07 21:16:11

标签: ios uitableview xamarin

我正在研究一个包含两个部分的tableview。我想在第二节标题中添加一个headerView。

我已经实现了以下代码。它会调用TitleForHeader,但遗憾的是,GetHeightForHeaderGetViewForHeader都没有被调用。任何人都有任何线索?

public override string TitleForHeader (UITableView tableView, nint section)
{
   if (section == 0)
   {
     return "Details";
   }
   if (section == 1)
   {
     return "Settings";
   }

 return "";
}

public override nfloat GetHeightForHeader(UITableView tableView, nint section)
{
    if (section == 0)
    {
       return 0.0001f;
    }
    if (section == 1) 
    {
        return 100.0f;
    }
  return UITableView.AutomaticDimension;
}

public override UIView GetViewForHeader(UITableView tableView, nint section)
{
  if (section == 1) {
    UIView headerView = new UIView (new CGRect (0, 0, (float)tableView.Bounds.Width, (float)tableView.SectionHeaderHeight));
    headerView.BackgroundColor = UIColor.Black;
    return headerView;
   }
   else {
      return null;
   }
}

2 个答案:

答案 0 :(得分:3)

我遇到同样的问题我刚刚意识到我正在设置委托和源代码:

Table.Delegate = new TableDelegate(this); //remove this bit
Table.Source = new TableSource<string>(list, Table);

我意识到我应该只使用UITableViewSource而不是同时设置它们。

  

UITableViewSource替换了以下两个类,它们仍然可以在Xamarin.iOS中使用,但通常不需要:

     

UITableViewDataSource - 在Xamarin.iOS中作为抽象类建模的Objective-C协议。必须进行子类化以提供包含每个单元格视图的表格,以及有关页眉,页脚以及表格中行和节的数量的信息。

     

UITableViewDelegate - 在Xamarin.iOS中作为类建模的Objective-C协议。处理选择,编辑功能和其他可选表格功能。

Xamarin docs

我刚刚将行选择的方法移到我的TableSource中,它现在调用TitleForHeaderGetViewForHeader方法(它们不是互斥的)和设置来源没有代表。

答案 1 :(得分:0)

出现同样的问题,我忘了在viewDidLoad中设置委托

public override void ViewDidLoad()
{
     base.ViewDidLoad();

     TableView.DataSource = new YourViewControllerTableDataSource();
     TableView.Delegate = new YourViewControllerTableDelegate();

}