如何强制UIButton刷新?

时间:2009-10-25 20:52:55

标签: iphone objective-c cocoa-touch

我的工作片段如下:

for (UIButton *b in buttonMapping) {
    [b setTitle:@"yo!" forState:UIControlStateNormal];
    [NSThread sleepForTimeInterval:1.0];
}

有四个按钮,所有四个按钮都会更新。但是,不是每秒更新一次,而是四秒钟。他们都更新了。

如何强制UIButton更新?或者这不是推荐的睡眠方法吗?

1 个答案:

答案 0 :(得分:5)

[b setNeedsDisplay];

我也不建议睡觉主线程(就像你在这里做的那样),因为这会禁用所有用户交互。

有几种选择。一种可能是使用NSTimer每秒执行一次特定方法。但是,更简单的方法是执行以下操作:

for (NSUInteger idx = 0; idx < [buttonMapping count]; idx++) {
  UIButton * b = [buttonMapping objectAtIndex:idx];
  [b performSelector:@selector(setNormalStateTitle:) withObject:@"yo!" afterDelay:(idx*60)];
}

然后将一个方法添加到名为setNormalStateTitle:的UIButton(即一个类别)中,该方法只执行setTitle:forControlState:方法。使用这种方法,您根本不需要setNeedsDisplay方法。