TableViewController не мигает индикаторы прокрутки, даже если таблица больше, чем представление - PullRequest
15 голосов
/ 19 июля 2010

У меня странная проблема с TableViewController.В документе говорится, что tableViewController также имеет дело с методом -flashScrollIndicators, когда таблица «слишком велика» относительно видимой области.

Мое приложение состоит из 3 контроллеров навигации, загруженных в контроллер вкладок.Каждый контроллер nav имеет в качестве корневого контроллера представления подкласс контроллера табличного представления.Каждая «модель» заполняется из файла plist, который загружает свое содержимое в массив в -viewDIdLoad, позже все передается в таблицу.Все загружается программно без IB.

Я обнаружил в своем приложении, что при загрузке первого представления (контроллера навигации с контроллером представления таблицы в качестве root) полоса прокрутки не мигает, даже еслиКоличество клеток достаточно велико.Если я выберу другую вкладку, которая загружает другой навигационный контроллер (с tvc в качестве root), полоса прокрутки больше не отображается.Когда я нажимаю вкладку, соответствующую первому загруженному навигационному контроллеру, полоса прокрутки мигает.

Итак, я попытался заставить ее мигать программно, но никак, код кажется простым:

[self.tableView flashScrollIndicators];

Я пытался поставить его почти везде.Сначала в -viewDidLoad (как предлагается в документе), затем в viewDidAppear и в -viewWillAppear.Также попытался использовать этот код tring для преобразования представления tvc в табличное представление.

[((UITableView*)self.view) flashScrollIndicators];

.. без результата.

Я начал смотреть пример Apple иобнаружил, что в табличном представлении Apple пользовательский образец (с разным временем) полоса прокрутки также не мигает.Протестировано как на симе, так и на устройстве.

Это ошибка ?, есть ли правильный способ показать это программно?Кто-нибудь может мне помочь?С уважением, Андреа

Ответы [ 4 ]

41 голосов
/ 09 декабря 2010

Или более кратко:

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [self.tableView performSelector:@selector(flashScrollIndicators) withObject:nil afterDelay:0];
}
12 голосов
/ 18 августа 2010

У меня была точно такая же проблема. В конце концов я справился с этим, поместив отложенный селектор в метод viewDidAppear:. Как ни странно, я могу установить его на 0 секунд, и он все еще работает нормально.

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self performSelector:@selector(flashTableScrollIndicators) withObject:nil afterDelay:0.0];
}

- (void)flashTableScrollIndicators
{
    [self.tableView flashScrollIndicators];
}
3 голосов
/ 07 мая 2013

Не отображается при отображении заголовков разделов.

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; 
0 голосов
/ 30 декабря 2014

Мое решение состояло в том, чтобы отправить сообщение «flashScrollIndicators ()» с небольшой задержкой, используя «dispatch_after»:

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.4 * Double(NSEC_PER_SEC)))

dispatch_after(delayTime, dispatch_get_main_queue(), 
{ () -> Void in 
    myScrollView.flashScrollIndicators() 
})
...