我有一个UIButton,我试图在其动作触发时禁用。这没有效果:
[self.controlBTN setEnabled:NO];
为了避开不可避免的问题,self.controlBTN确实指向了有问题的按钮。我提供的证据是,如果我用这句话替换它:
[self.controlBTN setTitle:@"What?" forState:UIControlStateNormal];
标题发生了变化。所以,我可以更改标题,但我无法禁用该按钮。为什么?文档说启用是一个属性,并没有提到它是只读的。
答案 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。