2011-06-27 28 views
1

我目前使用NSNotifications从我的应用程序委托向我的iPhone应用程序中的UIView发送消息。iPhone - 我如何刷新/重画一个已改变状态的按钮?

UIView接收到通知,然后使用选择器更改UIView上按钮的状态。

这里是传递到选择的功能:

-(void)changeButtonState 
{ 
    NSLog(@"Change button state received"); 
    [testButton setEnabled:NO]; 
    [testButton setNeedsDisplay]; 
} 

这被称为但是按键的状态永远不会在视觉上的改变,但功能被禁用,但看起来像它在屏幕上仍处于启用状态。

所以它看起来像setNeedsDisplay要么不在这里工作,要么是不正确的编码?

任何人都可以告诉我如何正确重绘按钮或视图,当我改变状态?

+2

我相信你会想到这一点,但是因为你没有在你的问题中提到它,只要确保:你是否在你的按钮上为UIControlStateDisabled设置了一个新的图像/标题/ etc,或者在IB还是代码?通常调用'setEnabled'会自动使按钮重新绘制其新状态,除非您没有设置不同的状态或将其重新实现在子类中。 – lxt

+2

你确定'testButton'已连接而不是'nil'吗? –

+2

我可能是错的,但我认为setNeedsDisplay只能在主线程中调用时才起作用。所以尝试调用'performSelectorOnMainThread'也许? –

回答

4

由于UI刷新通常在主线程上完成,所以setNeedsDisplay只会在主线程上调用。因此,您需要确保使用performSelectorOnMainThread在主线程上调用它。