拖动UITableView时,performSelector无法运行?

时间:2010-11-19 23:41:28

标签: iphone cocoa-touch uitableview nsrunloop

我的UITableViewController默认为UITableView。我开始用手指慢慢拖动桌子滚动,即不用手指轻弹它。每次表格在屏幕上移动时,都会调用控制器的scrollViewDidScroll方法;如果符合我指定的某些条件,则其中一个scrollViewDidScroll调用会performSelector:withObject:afterDelay使用afterDelay来安排某些操作。

但是,我发现在我松开手指之前动作才会执行。例如,如果我将{{1}}参数设置为2秒,但是按住我的手指5秒钟,当我松开手指并且动作执行时间为3秒太迟了。有没有办法允许动作(更新UI,因此必须在主线程中运行)在手指仍在屏幕上时执行?

谢谢!

1 个答案:

答案 0 :(得分:8)

这是因为当UIScrollView(UITableView的超类)滚动时,它会更改其runloop,以便将scrollView优先于应用程序正在执行的任何操作。发生这种情况是为了确保滚动尽可能顺畅。

尝试使用此版本的延迟方法:

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

对于模式,我建议从包含以下内容的数组开始: [[NSRunloop currentRunLoop] currentMode]NSDefaultRunLoopMode