【问题标题】:performSelector unable to run while UITableView is dragged?拖动 UITableView 时 performSelector 无法运行?
【发布时间】:2010-11-19 23:41:28
【问题描述】:

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

但是,我发现在我松开手指之前该操作不会执行。例如,如果我将afterDelay 参数设置为 2 秒,但按住手指 5 秒,当我松开手指并执行操作时,为时已晚 3 秒。有什么方法可以让动作(即更新 UI,因此必须在主线程中运行)在手指仍然靠在屏幕上时执行?

谢谢!

【问题讨论】:

标签: iphone cocoa-touch uitableview nsrunloop


【解决方案1】:

这是因为当UIScrollView(UITableView 的超类)滚动时,它会更改其运行循环,以便将 scrollView 优先于应用程序正在执行的任何操作。这样做是为了确保滚动尽可能流畅。

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

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

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

【讨论】:

  • 感谢您的回答!它真的帮助了我。但数组略有不同:[NSArray arrayWithObject:NSRunLoopCommonModes]
  • NSRunLoopCommonModes 使延迟执行工作。谢谢米罗斯拉夫
  • 非常感谢!你拯救了我的一天!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多