2012-02-01 3 views
10

Я использую UIView tableFooterView из моего UITableView, чтобы показать ярлык «Загрузка большего» в нижней части таблицы. Когда отображается UIView в tableFooterView, мне нужно начать небольшую загрузку содержимого. Как узнать, когда отображается TableFooterView?UITableView: Выполнить код при отображении tableFooterView?

ответ

12

Вместо того, чтобы определить, когда вид сноски покажет вам могли чек, когда последняя строка таблицы запрашивается и загрузить данные затем. Число пользователей, прокручивающихся до последней строки без прокрутки вниз, чтобы увидеть нижний колонтитул, вероятно, очень мало. Эффект будет таким же, т. Е. Вы знаете, когда пользователь прокручивается донизу, и вы должны загружать больше данных.

Это может быть легко реализовано в tableView:cellForRowAtIndexPath:. Следя за тем, что IndexPath является последним, и обновляя его каждый раз, когда новые строки добавляются или удаляются, вы можете просто проверить, является ли IndexPath запрашиваемой ячейки такой же, как IndexPath последней строки, и запускает ленивую загрузку больше данных оттуда, так же, как вы сейчас это делаете.

+1

Проголосовало за то, что так я его осуществил один раз - кажется мне самым чистым решением. –

+0

Это именно то, что я сейчас делаю сейчас. Я просто буду делать это так. – dhrm

+0

Я тоже делаю то же самое, но это лучший способ? – Alupotha

0

Поскольку tableFooter, как вы говорите, UIView, он обрабатывает чертеж в drawRect:. Если вы перепишете, вы можете получить уведомление.

Редактировать: старый ответ был неправильным.

1

Вы можете преобразовать рамки нижнего колонтитула в координаты окна и сравнить их. Если нижний колонтитул скрыт, то предполагается, что он имеет координаты Y начала координат> 480 (для портретного режима), когда появится нижний колонтитул, а затем координаты начала координат < 480. Вы можете сделать сравнение в методе didScroll.

Спасибо, надеюсь, это поможет вам.

метод См convertRect:toView:

0

Если ваш tableFooterView наблюдает изменения в contentOffset собственности стола (и, возможно, также изменения в contentSize имущества таблицы), вы можете точно рассчитать, когда он прокручивается в поле зрения со следующими переменными:

  • tableView.contentOffset.y - вертикальная величина, на которую происхождение представления содержимого является смещение от начала координат окна просмотра прокрутки
  • tableView.contentSize.height - высота представления содержимого
  • tableView.bounds.size.height - Высота стола границ

Если вертикальное смещение содержимое + высота таблицы границ превышает высоту размера содержимого таблицы, мы можем предположить, что сноска теперь в поле зрения.

Вы можете обернуть это в оператор if и использовать его для отправки уведомления.После этого вы можете сделать дальнейшие испытания, чтобы сделать футер динамически растягивать тоже или другие желаемые результаты:

if((tableView.contentOffset.y + tableView.bounds.size.height) > tableView.contentSize.height){ 
    //send notification, dynamic resizing, etc...` 
} 

Вот небольшой фрагмент кода в действии:

// Set up an observer for changes in the table's contentOffset or contentSize. 
// This can be done during initialisation of the tableFooterView 
[tableView addObserver:self 
      forKeyPath:@"contentOffset" 
       options:NSKeyValueObservingOptionNew 
       context:NULL]; 
[tableView addObserver:self 
      forKeyPath:@"contentSize" 
       options:NSKeyValueObservingOptionNew 
       context:NULL]; 

// Further down in code, listen for the changes: 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
    change:(NSDictionary *)change context:(void *)context { 
    if ([keyPath isEqualToString:@"contentOffset"] || 
     [keyPath isEqualToString:@"contentSize"]) { 

     if((tableView.contentOffset.y + tableView.bounds.size.height) > tableView.contentSize.height){ 
      // the tableFooterView should now be in view 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:@"scrollToLoadNeedsLoad" 
           object:self]; 
      // dynamically change the footer here (ideal for making it stretch with the table) 
     } 

    } 
} 

Вы можете реализовать это в контроллере представления, который содержит ссылку на таблицу, или вы можете инкапсулировать ее в свой собственный ScrollToLoadView.

+0

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

Смежные вопросы