iphone - UITableView 被拖动时,performSelector 无法运行?

标签 iphone cocoa-touch uitableview nsrunloop

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

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

谢谢!

最佳答案

这是因为当 UIScrollView(UITableView 的父类(super class))滚动时,它会更改其运行循环,以便优先考虑 ScrollView 而不是应用程序正在执行的操作。这样做是为了确保滚动尽可能平滑。

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

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

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

关于iphone - UITableView 被拖动时,performSelector 无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4230361/

相关文章:

iphone - UIProgressView 在低值问题上有进展

objective-c - 切换选项卡时没有获取 viewDidLoad 或 Appear——我可以使用 NSNotification 吗?

iphone - 字体文件已添加到项目、plist、代码和编译资源中,但仍然无法正常工作

ios - 如何让我的应用程序在 iPhone 4 和 iPhone 5 屏幕上运行?

iphone - 如何使用 iPhone CLLocationManager 获取精确坐标

iphone - 如何立即保存 iPhone 上的设置?

ios - 具有多个语句的 NSPredicate

iphone - UITableView 上的触摸事件?

objective-c - UITableViewCell<MFMailComposeViewControllerDelegate> 崩溃 didReceiveMemoryWarning

swift - ui加载时自动布局