Есть ли способ узнать, когда индекс uitableview действительно используется?
Есть ли способ узнать, когда индекс uitableview действительно используется? Я не могу найти никаких методов в документации Apple, но мне было интересно, знает ли кто-нибудь еще что-нибудь. Я бы хотел сделать анимацию в моем табличном представлении, которая меняется в зависимости от того, какой раздел выбран в индексе, и я понятия не имею, как это сделать без доступа к индексу табличного представления.
Любая помощь с благодарностью.
Благодарю.
2 ответа
UITableViewDataSource
метод делегата-tableView:sectionForSectionIndexTitle:atIndex:
возвращаетNSInteger
представляет раздел, выбранный из индекса раздела. Переопределите этот метод в любом классе вашего делегата источника данных (вероятно, вашего контроллера табличного представления).Установите свойство в контроллере представления,
NSInteger
называетсяselectedSectionIndex
, Его значение устанавливается в вышеупомянутом методе делегата.Наконец, настройте наблюдателя в контроллере представления, который ожидает изменений в этом свойстве и запускает нужный код, когда изменение действительно наблюдается.
В вашем -viewWillAppear:
метод, например:
[self addObserver:self forKeyPath:@"selectedSectionIndex" options:NSKeyValueObservingOptionNew context:nil];
В вашем -viewWillDisappear:
Метод, отмените регистрацию наблюдателя:
[self removeObserver:self forKeyPath:@"selectedSectionIndex"];
Это важно сделать так, чтобы -dealloc
Метод не вызывает исключение.
Наконец, настройте метод наблюдателя, чтобы сделать что-то, когда есть изменение selectedSectionIndex
:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqual:@"selectedSectionIndex"]) {
// The section index changed, so trigger some cool animation
}
}
Шаблон наблюдения значения ключа является хорошим общим способом инициирования чего-либо, когда значение объекта где-то изменяется. Apple написала хороший "быстрый старт" документ, который знакомит с этой темой.
Не очень элегантное решение, но вы можете создать подкласс UITableView и наблюдать за ним в - (void)didAddSubview:(UIView *)subview;
когда он впервые появляется Это предполагает, что он добавляется непосредственно в UITableView, а не в одно из его подпредставлений или суперпредставлений, и что вы можете распознать добавленное представление в качестве индекса. Также возможно, что после первого добавления он будет скрыт и показан вместо того, чтобы быть удаленным и добавленным снова.