UIButton setEnabled 不起作用

Posted

技术标签:

【中文标题】UIButton setEnabled 不起作用【英文标题】:UIButton setEnabled not working 【发布时间】:2012-10-13 13:42:52 【问题描述】:

在 viewDidLoad 中,我检查两个 UITextField 是否具有有效输入(文本长度 > 0),然后设置 UIButton 的 enabled 属性。使用调试器我发现

self.loginButton.enabled = YES;

被执行,但是当我用

打印布尔值时
print self.loginButton.enabled

我在执行语句之前得到 NO(这没关系),但在执行语句之后也得到 NO。我还多次检查了 self 的 UIButton 属性是否使用 IBOutlet 连接到我的故事板中的 UIButton,就是这种情况。我还可以使用控制台打印 titleLabel 的文本。当我点击其中一个 UITextFields 并更改文本时

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

正在被调用,我将在那里再次检查文本。这里

self.loginButton.enabled = YES;

似乎工作正常。使用 ios 5 时我没有任何问题,但我在此问题的文档中没有发现 iOS 6 的任何相关更改。

有什么想法吗?

编辑:问题有所不同。我在那个 UIViewController 中也有一个 UITableView,并且 tableView 比预期的要大(然后在 Storyboard 中设置更大)(直到知道我不知道为什么)并且似乎覆盖了 UIButton。在执行前更改 UIButton 或 UITableView 的框架

self.loginButton.enabled = YES;

有效。设置启用属性时可能会有延迟,因为打印布尔值仍然返回 NO。

NSLog(@"%i",self.loginButton.isEnabled);
self.loginButton.enabled = YES;
NSLog(@"%i",self.loginButton.isEnabled);

2012-10-13 16:11:43.460 [1524:c07] 1
2012-10-13 16:11:43.462 [1524:c07] 1

【问题讨论】:

【参考方案1】:

你在initWithNibName: 中做self.loginButton.enabled = YES; 吗?可能,self.loginButton 不会在您执行此操作时从 xib 初始化,这可以解释为什么它在 shouldChangeCharactersInRange 中有效。尝试打印self.loginButton 看看是不是这样。

【讨论】:

只需从xib中删除引用并再次给它引用...我认为这可能是引用问题。 不,正如我在问题中提到的,我在 viewDidLoad 中执行 self.loginButton.enabled。使用情节提要时不使用 AFAIK initWithNibName。如果 UIButton 不会被初始化,那么它在调试器中将是 nil 并且我无法打印我猜的 titleLabel 的文本。【参考方案2】:

问题是 UITableView 正在从情节提要中声明的初始大小调整大小,因为自动调整大小,然后它覆盖了 UIButton 区域。并且按钮点击被解释为与 UITableView 的交互。更改 UIButton 框架、UITableView 框架或自动调整大小设置可以解决问题。

【讨论】:

以上是关于UIButton setEnabled 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

button.setEnabled(false) 在 ViewPager 中不起作用

iOS UIButton - UIButton setUserInteractionEnabled 和 setEnabled 之间的区别

UIButton 动作不起作用

UIButton 的 isEnabled 功能不起作用

UIButton 选择器方法不起作用

UIButton垂直对齐不起作用