我正在处理奇怪的错误,我创建了一个包含uibuttons的自定义分段控件(控制器本身是UIView的子类。我更改了所选和正常控制状态的按钮图像以指示选择。
在IB的父视图中,我已将视图的标识设置为我的自定义类。问题是我有一个tableView,当我滚动它和滚动动画时,我的自定义视图中的按钮不会立即更改其图像,而是等待表完成滚动然后更新。有任何想法吗?
答案 0 :(得分:1)
你没有提供很多细节,但听起来很,好像你在当前的运行循环中尝试做太多工作一样。如果是,那么答案将是相关的:
iOS等待代码完成执行,然后再进行任何显示更新。因此,任何更新实际上都会排队,直到您当前的代码块完成为止。为了解决这个问题,最常见的技巧是允许当前的运行循环结束,并在很短的延迟后再次执行拾取。
因此,在您的情况下,请调用代码来更新自定义段控件。然后,不是调用代码来更新表,而是将代码保存在另一个方法中,并使用[self performSelector: @selector(delayedUpdate) withObject: nil afterDelay:0.1];
说明如何更改代码:
在
[self updateSegmentController];
[self updateTableScrollPosition];
return;
在
[self updateSegmentController];
[self performSelector: @selector(updateTableScrollPosition) withObject: nil afterDelay: 0.1];
return;
0.0的延迟通常很好;在调用指定方法之前,它仍然可以实现让当前运行循环完成并显示更新的效果。有时添加额外的延迟会改善动画外观。