我已经查看了Stack Overflow上的无数问题,他们都在问同样的问题。你如何以编程方式禁用UIButton?他们都没有正确回答这个问题。我试过了:
[myButton setEnabled:NO];
和
self.myButton.enabled = NO;
和
[self.myButton setEnabled:NO];
和无数其他人。什么都行不通。
我在.h
文件中声明了按钮:
- (IBAction)myButton;
执行此操作的正确语法是什么?我正在尝试禁用viewDidLoad
中的按钮,以便稍后可以重新启用它。 (我知道[myButton setEnabled:NO];
适用于通过IBOutlet
声明的按钮,但它不适用于通过IBAction
声明的按钮。)
答案 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建议的那样,您可以添加一个日志语句以在运行时检查以查看插座连接是否良好。
这有帮助吗?