2016-04-22 4 views
2

Я хочу добавить нижний колонтитул к UITableView, который показывает UIProgresIndicator, когда пользователь достиг конца списка и будут загружены новые данные, или UILabel когда больше данных не будет выбрано.Добавить пользовательский нижний колонтитул в конце UITableView в Xamarin.iOS

Я использовал следующий код, но ничего не происходит:

UITableViewHeaderFooterView footer = new UITableViewHeaderFooterView(); 

UILabel futerlabel = new UILabel(); 
futerlabel.Text = "Duke u ngarkuar"; 

footer.AddSubview (futerlabel); 

Любой способ, как этого добиться.

ответ

2

Если вы находитесь в UITableViewController попробовать это:

 TableView.TableFooterView = footer; 

UPDATE

После того, как думать об этом, я бы предложил не использовать колонтитул, а скорее дополнительные клетки в конце вашего данных, это получит effect.

Используя этот метод, чтобы проверить, если вы прокручивается до последнего пункта и обновить данные таблицы:

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();  
      } 

     } 
    } 

, а затем в Делегирование проверки последнего элемента и создать другую клетку следующим образом:

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

+0

Нет, я нахожусь в UIViewController, потому что у меня также есть SearchBar и некоторые другие UIViews. У меня есть класс UITableViewSource и пользовательский класс UITableViewCell. – Xhulio

+1

. Я обновил свой ответ с помощью решения, которое может подойти, сообщите мне, есть ли у вас какие-либо проблемы. –

2

Вы можете AcC omplish это несколькими способами, я макет несколько здесь:

В вашей TableViewSource вы можете сделать это:

1.) Реализация: public override UIView GetViewForFooter(UITableView tableView, nint section) и вернуть UILabel

2.) Реализовать public override nfloat GetHeightForFooter(UITableView tableView, nint section) и возврат высота для вашего UIView


Если ваш Footer будет простой UILabel, вы можете заменить Шаг 1 выше с этим:

Внесите public override string TitleForFooter(UITableView tableView, nint section) и верните «Duke u ngarkuar».

Вам по-прежнему необходимо реализовать public override nfloat GetHeightForFooter(UITableView tableView, nint section) и вернуть высоту, иначе ваш нижний колонтитул не появится.


В качестве альтернативы, UITableView предоставляет свойство под названием TableFooterView, что позволяет установить UIView для колонтитула.

0

Вы можете оценить это по своему усмотрению.

var footerView = new UIView(new RectangleF(0, 0, 375, 66)); 
TableView.TableFooterView = footerView; 
Смежные вопросы