2014-05-16 51 views
0

我想执行操作的UI线程(设置按钮启用状态)performSelector:withObject:afterDelay块UI线程

但是,如果我要执行它的“延迟后”似乎阻止用户界面螺纹

-(void)changeButtonState:(UIButton *)btn{ 
    [btn setEnabled:NO]; 

    [self performSelector:@selector(reenableButton:) withObject:btn afterDelay:5]; 

} 

-(void)reenableButton:(UIButton*)btn{ 
    [btn setEnabled:YES]; 
} 

我怎么能延迟后进行选择,没有它阻塞主线程,我需要做的操作必须在UI线程做什么?

+0

'performSelector:withObject:afterDelay:'不会阻塞当前线程。你是说你的UI被阻塞了5秒,直到选择器被调用?这根本不应该发生。 – rmaddy

+0

我有2个编辑文本在屏幕上和一个按钮,在第一个编辑文本中输入一些输入后,我点击该按钮,反过来变为禁用,我无法点击第二个编辑文本来改变它的值之前该按钮变为重新启用。我已经把它写在如此按下屏幕之外的任何视图(编辑区域,按钮)上,隐藏了键盘,当按钮被禁用时不会发生 –

回答

0

这听起来像你的你的网点错了。也许你已经为底层视图做了一个插件,而不是按钮。

如果是这样的话,那么你应该得到一个警告是这样的:Incompatible pointer types sending 'UIView *' to parameter of type 'UIButton *'

这可以解释为什么一切都被禁止,而不仅仅是按钮。