setEnabled:NO不适用于iOS按钮

时间:2013-07-18 22:59:46

标签: ios uibutton

我有一个UIButton,我试图在其动作触发时禁用。这没有效果:

[self.controlBTN setEnabled:NO];

为了避开不可避免的问题,self.controlBTN确实指向了有问题的按钮。我提供的证据是,如果我用这句话替换它:

[self.controlBTN setTitle:@"What?" forState:UIControlStateNormal];

标题发生了变化。所以,我可以更改标题,但我无法禁用该按钮。为什么?文档说启用是一个属性,并没有提到它是只读的。

2 个答案:

答案 0 :(得分:4)

[UIButton setEnabled:(BOOL)enabled]无任何问题。您要么以某种方式将其重新设置为YES,要么您可能正在重新分配按钮并将其作为子视图添加回旧按钮(使用相同的框架)。

这种错误比您想象的更频繁发生,尤其是当按钮放在UITableViewCell上时。

您尚未发布创建按钮的位置代码,因此我最多可以为您提供一个推测性答案。如果您发布更多代码,我可以为您提供更好的答案。

答案 1 :(得分:0)

很抱歉,大家......我没有提到的是,我试图在延迟后使用dispatch_after()重新启用UIButton。不幸的是,这句话:

dispatch_after(2 * NSEC_PER_SEC,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ {[sender setEnabled:YES];});

正在即时执行,所以看起来好像setEnabled:不起作用。

我现在更仔细地阅读 when 参数的文档,用dispatch_time(DISPATCH_TIME_NOW,2 * NSEC_PER_SEC)替换2 * NSEC_PER_SEC,一切正常。

Mea culpa。