0

У меня есть 2 ViewControllers, каждый из которых включает scrollview (который показывает несколько графиков) и tableview. Я хотел бы обновить содержимое tableview на основе текущего графика, отображаемого в scrollview.Обновление UITableView при изменении содержимого UIScrollView

Управление прокруткой управляется отдельным классом GraphScrollView, где свойство currentIndex хранит текущий отображаемый график.

Проблема в том, что я не знаю, как сообщить viewController, что currentIndex изменен, чтобы он мог отправить метод reloadData для обновления tableview. Я собирался опубликовать уведомление в классе GraphScrollView и добавить Observer в 2 viewControllers, но в этом случае 2 ViewControllers будут проинформированы, пока я хочу сообщить только viewController текущего активного представления (потому что два VC должны быть независимым, а также потому, что 2 viewControllers могут иметь различное количество графиков, и, следовательно, currentIndex может быть неправильным значением для одного из двух VC).

Спасибо, Corrado

ответ

0

Я предполагаю, что вы можете установить и удалить контроллеры просмотра в качестве наблюдателей, когда «активный вид» изменения.

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

0

Непонятно из вашего вопроса, как вы меняете currentIndex в своих списках прокрутки. Но вы всегда можете реализовать UIScrollViewDelegate в своем контроллере просмотра, чтобы получить обновление при завершении прокрутки:

... 
@implementation ViewController 
... 
- (void)viewDidLoad { 
    ... 
    self.graphScrollView.delegate = self; 
    ... 

} 

... 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    if (self.graphScrollView.currentIndex == ???) { 
     [self.tableView reloadData]; 
    } 
} 
... 
Смежные вопросы