以编程方式禁用UIButton

时间:2014-02-15 03:56:09

标签: ios objective-c uibutton

我已经查看了Stack Overflow上的无数问题,他们都在问同样的问题。你如何以编程方式禁用UIButton?他们都没有正确回答这个问题。我试过了:

[myButton setEnabled:NO];

self.myButton.enabled = NO;

[self.myButton setEnabled:NO];

和无数其他人。什么都行不通。

我在.h文件中声明了按钮:

- (IBAction)myButton;

执行此操作的正确语法是什么?我正在尝试禁用viewDidLoad中的按钮,以便稍后可以重新启用它。 (我知道[myButton setEnabled:NO];适用于通过IBOutlet声明的按钮,但它不适用于通过IBAction声明的按钮。)

2 个答案:

答案 0 :(得分:7)

如果您执行以下操作,您将知道您的代码是否正常工作:

if(self.myButton)
{
    [self.myButton setEnabled:NO];
} else {
   NSLog(@"hey look, I forgot to connect the myButton outlet property!");
}

此外,您的按钮应声明为“IBOutlet”,例如:

// I use "weak" here because it's retained/kept by the storyboard/XIB file, although
// you could also use "strong"...
@property (weak) IBOutlet UIButton *myButton;

并且需要按照以下方式声明操作:

- (IBAction) myButton: (id) sender;

所有IBActions都采用“sender”属性。

答案 1 :(得分:1)

当我拳头学习可可时,我也在努力解决这个问题。

让我试着澄清你已经得到的答案,因为它听起来对你没有意义。

对IB中的UI元素进行故障诊断就像对立体声系统或计算机进行故障排除。在立体声系统中,请务必检查电缆。通常问题的原因是连接不良。

与接口代码类似,原因通常是IBOutlet或IBAction连接断开或丢失。

关于IBOutlets和IBActions是什么:

IBOutlets是与事物的联系:某种UIView对象。有时插座连接到按钮,有时它是标签,文本字段或其他东西。名称“outlet”表示它用于输出,例如在标签或文本字段中显示信息。这就是为什么它被称为IBOutlet。 (虽然您可以与UIButton建立IBOutlet连接,但您可以执行启用/禁用按钮等操作。)

IBActions是动词。它们告诉UIControl对象(如按钮)当事件发生时它应该执行什么代码(动作方法)。名称中的“行动”一词是您记忆中的助记符。

在您的情况下,您希望通过代码启用/禁用按钮。为此,您需要与IBOutlet建立连接。

您需要在标题中定义IBOutlet(代码中的插座是套接字,以继续立体声类比),然后您需要将视图对象(立体声组件)连接到IBOutlet(套接字)。连接是电缆。如果不进行连接,则IBOutlet(套接字)为空,并且未连接任何内容。 (电缆丢失了。)

您可以进入IB,选择故事板场景,选择按钮,然后显示“连接检查器”。它应该显示与视图控制器的IBOutlet连接。

或者,正如Michael建议的那样,您可以添加一个日志语句以在运行时检查以查看插座连接是否良好。

这有帮助吗?