在 Xamarin.iOS 中的 UITableView 末尾添加自定义页脚
Add a Custom Footer at the end of UITableView in Xamarin.iOS
我想向 UITableView
添加页脚视图,当用户到达列表末尾并加载新数据时显示 UIProgresIndicator
,或者 UILabel
当没有更多数据要获取时。
我使用了下面的代码,但没有任何反应:
UITableViewHeaderFooterView footer = new UITableViewHeaderFooterView ();
UILabel futerlabel = new UILabel ();
futerlabel.Text = "Duke u ngarkuar";
footer.AddSubview (futerlabel);
任何方式如何实现这一点。
如果你在 UITableViewController
试试这个:
TableView.TableFooterView = footer;
更新
考虑一下之后,我建议不要使用页脚,而是在数据末尾使用一个额外的单元格,这将得到这个 effect。
使用此方法检查您是否已滚动到最后一项并更新 table 的数据:
public override void WillDisplay (UITableView tableView, UITableViewCell cell, NSIndexPath indexPath)
{
// if showing last row of last section, load more
if (indexPath.Section == tableView.NumberOfSections()-1 && indexPath.Row == tableView.DataSource.RowsInSection(tableView, indexPath.Section)-1 && !FullyLoaded) {
var growRowSource = tableView.DataSource as GrowRowTableDataSource;
if (growRowSource != null) {
FullyLoaded = growRowSource.LoadNextPage ();
Task.Delay (5000);
tableView.ReloadData ();
}
}
}
然后在 Delegate 中检查最后一项并创建一个不同的单元格,如下所示:
public override UITableViewCell GetCell (UITableView tableView, Foundation.NSIndexPath indexPath)
{
if (indexPath.Row == LoadedItems.Count) {
var loadingCell = tableView.DequeueReusableCell (LoadingCellID, indexPath) as LoadFooterCell;
loadingCell.Loading = !hasNextPage;
return loadingCell;
}
var cell = tableView.DequeueReusableCell (CellID, indexPath) as GrowRowTableCell;
var item = LoadedItems [indexPath.Row];
// Setup
cell.Image = UIImage.FromFile(item.ImageName);
cell.Title = item.Title;
cell.Description = item.Description;
return cell;
}
bool hasNextPage;
我在这里快速模拟了 GrowTable Xamarin 示例代码中的一个示例:
https://github.com/b099l3/LoadingTableExample
您可以通过多种方式完成此操作,我将在此处列出一些:
在您的 TableViewSource
中,您可以这样做:
1.) 实施:public override UIView GetViewForFooter(UITableView tableView, nint section)
和 return 您的 UILabel
2.) 为您的 UIView
实施 public override nfloat GetHeightForFooter(UITableView tableView, nint section)
和 return 高度
如果您的页脚将是一个简单的 UILabel,您可以将上面的步骤 1 替换为:
实施 public override string TitleForFooter(UITableView tableView, nint section)
和 return "Duke u ngarkuar"。
您仍然需要实现 public override nfloat GetHeightForFooter(UITableView tableView, nint section)
和 return 高度,否则您的页脚将不会显示。
或者,UITableView 公开了一个名为 TableFooterView
的 属性,它允许您为页脚设置 UIView。
您可以根据自己的喜好调整大小。
var footerView = new UIView(new RectangleF(0, 0, 375, 66));
TableView.TableFooterView = footerView;
我想向 UITableView
添加页脚视图,当用户到达列表末尾并加载新数据时显示 UIProgresIndicator
,或者 UILabel
当没有更多数据要获取时。
我使用了下面的代码,但没有任何反应:
UITableViewHeaderFooterView footer = new UITableViewHeaderFooterView ();
UILabel futerlabel = new UILabel ();
futerlabel.Text = "Duke u ngarkuar";
footer.AddSubview (futerlabel);
任何方式如何实现这一点。
如果你在 UITableViewController
试试这个:
TableView.TableFooterView = footer;
更新
考虑一下之后,我建议不要使用页脚,而是在数据末尾使用一个额外的单元格,这将得到这个 effect。
使用此方法检查您是否已滚动到最后一项并更新 table 的数据:
public override void WillDisplay (UITableView tableView, UITableViewCell cell, NSIndexPath indexPath)
{
// if showing last row of last section, load more
if (indexPath.Section == tableView.NumberOfSections()-1 && indexPath.Row == tableView.DataSource.RowsInSection(tableView, indexPath.Section)-1 && !FullyLoaded) {
var growRowSource = tableView.DataSource as GrowRowTableDataSource;
if (growRowSource != null) {
FullyLoaded = growRowSource.LoadNextPage ();
Task.Delay (5000);
tableView.ReloadData ();
}
}
}
然后在 Delegate 中检查最后一项并创建一个不同的单元格,如下所示:
public override UITableViewCell GetCell (UITableView tableView, Foundation.NSIndexPath indexPath)
{
if (indexPath.Row == LoadedItems.Count) {
var loadingCell = tableView.DequeueReusableCell (LoadingCellID, indexPath) as LoadFooterCell;
loadingCell.Loading = !hasNextPage;
return loadingCell;
}
var cell = tableView.DequeueReusableCell (CellID, indexPath) as GrowRowTableCell;
var item = LoadedItems [indexPath.Row];
// Setup
cell.Image = UIImage.FromFile(item.ImageName);
cell.Title = item.Title;
cell.Description = item.Description;
return cell;
}
bool hasNextPage;
我在这里快速模拟了 GrowTable Xamarin 示例代码中的一个示例: https://github.com/b099l3/LoadingTableExample
您可以通过多种方式完成此操作,我将在此处列出一些:
在您的 TableViewSource
中,您可以这样做:
1.) 实施:public override UIView GetViewForFooter(UITableView tableView, nint section)
和 return 您的 UILabel
2.) 为您的 UIView
public override nfloat GetHeightForFooter(UITableView tableView, nint section)
和 return 高度
如果您的页脚将是一个简单的 UILabel,您可以将上面的步骤 1 替换为:
实施 public override string TitleForFooter(UITableView tableView, nint section)
和 return "Duke u ngarkuar"。
您仍然需要实现 public override nfloat GetHeightForFooter(UITableView tableView, nint section)
和 return 高度,否则您的页脚将不会显示。
或者,UITableView 公开了一个名为 TableFooterView
的 属性,它允许您为页脚设置 UIView。
您可以根据自己的喜好调整大小。
var footerView = new UIView(new RectangleF(0, 0, 375, 66));
TableView.TableFooterView = footerView;