Есть ли способ узнать, когда индекс uitableview действительно используется?

Есть ли способ узнать, когда индекс uitableview действительно используется? Я не могу найти никаких методов в документации Apple, но мне было интересно, знает ли кто-нибудь еще что-нибудь. Я бы хотел сделать анимацию в моем табличном представлении, которая меняется в зависимости от того, какой раздел выбран в индексе, и я понятия не имею, как это сделать без доступа к индексу табличного представления.

Любая помощь с благодарностью.

Благодарю.

2 ответа

Решение
  1. UITableViewDataSource метод делегата -tableView:sectionForSectionIndexTitle:atIndex: возвращает NSInteger представляет раздел, выбранный из индекса раздела. Переопределите этот метод в любом классе вашего делегата источника данных (вероятно, вашего контроллера табличного представления).

  2. Установите свойство в контроллере представления, NSInteger называется selectedSectionIndex, Его значение устанавливается в вышеупомянутом методе делегата.

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

В вашем -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, а не в одно из его подпредставлений или суперпредставлений, и что вы можете распознать добавленное представление в качестве индекса. Также возможно, что после первого добавления он будет скрыт и показан вместо того, чтобы быть удаленным и добавленным снова.

Другие вопросы по тегам