Во время перетаскивания UITableView выполнить executeSelector невозможно? - PullRequest
2 голосов
/ 20 ноября 2010

У меня есть UITableViewController с его значением по умолчанию UITableView.Я начинаю медленно перетаскивать стол пальцем, чтобы прокрутить, то есть не щелкая пальцем.Каждый раз, когда таблица перемещается на экране, вызывается метод контроллера scrollViewDidScroll;когда некоторые условия, которые я указал, выполняются, один из этих вызовов scrollViewDidScroll использует performSelector:withObject:afterDelay, чтобы запланировать какое-либо действие на более позднее время.

Однако я обнаружил, что действие не будет выполнено, покаЯ отпускаю палец.Например, если я установил параметр afterDelay на 2 секунды, но держал палец в течение 5 секунд, когда я отпускаю палец, и действие выполняется, на 3 секунды уже поздно.Есть ли способ разрешить выполнение действия (которое должно обновлять пользовательский интерфейс и поэтому должно выполняться в главном потоке), пока палец все еще находится напротив экрана?

Спасибо!

1 Ответ

8 голосов
/ 29 декабря 2010

Это потому, что когда прокручивается UIScrollView (суперкласс UITableView), он меняет свой цикл запуска, чтобы расставить приоритеты scrollView над тем, что приложение делало.Это происходит для того, чтобы прокрутка была настолько плавной, насколько это возможно.

попробуйте использовать эту версию метода с задержкой:

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;

для режимов, я бы предложил начать с массива, который содержит следующее: [[NSRunloop currentRunLoop] currentMode], NSDefaultRunLoopMode

...