以编程方式禁用 UIButton [重复]
Posted
技术标签:
【中文标题】以编程方式禁用 UIButton [重复]【英文标题】:Programmatically disabling a UIButton [duplicate] 【发布时间】:2014-02-15 03:56:08 【问题描述】:我查看了 Stack Overflow 上的无数问题,都问同样的问题。如何以编程方式禁用 UIButton?他们都没有正确回答这个问题。我试过了:
[myButton setEnabled:NO];
和
self.myButton.enabled = NO;
和
[self.myButton setEnabled:NO];
还有无数其他人。没有任何工作。
我在.h
文件中这样声明按钮:
- (IBAction)myButton;
执行此操作的正确语法是什么?我正在尝试禁用viewDidLoad
中的按钮,以便以后可以重新启用它。 (我知道[myButton setEnabled:NO];
适用于通过IBOutlet
声明的按钮,但不适用于通过IBAction
声明的按钮。)
【问题讨论】:
建议 - 当看似显而易见的方法不起作用时,请在运行时验证变量不是nil
。
你上周问过同样的问题吗? ***.com/questions/21637388/…
@XuYin 这是我第一次真正让按钮正确禁用。这是一个类似但不同的问题。
【参考方案1】:
如果您执行以下操作,您将知道您的代码是否正常工作:
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;
所有 IBAction 都采用“sender
”属性。
【讨论】:
我为什么不将按钮声明为IBAction
按钮?
因为“IBAction
”是由按钮(或控件)调用的动作。
@MichaelDautermann 仅供参考 - 操作的 sender
参数实际上是可选的。只有处理多个按钮的操作才需要它。
对发送者与做某事是可选的,但是可以定义一个不采用“(id) sender
”参数的有效操作吗?
我创建了一个 UIButton 的 IBOutlet
实例,并将其附加到 UIButton,同时还保留了 IBAction
附加。 [myButton setEnabled:NO];
起作用了。【参考方案2】:
当我第一次学习 Cocoa 时,我也遇到了这个问题。
让我试着澄清一下你已经得到的答案,因为这听起来对你没有意义。
在 IB 中对 UI 元素进行故障排除就像对立体声系统或计算机进行故障排除一样。在立体声系统中,请始终检查电缆。通常问题的原因是连接不良。
与接口代码类似,原因通常是 IBOutlet 或 IBAction 连接断开或丢失。
关于什么是 IBOutlets 和 IBActions:
IBOutlets 是与事物的连接:某种 UIView 对象。有时一个插座连接到一个按钮,有时它是一个标签、一个文本字段或其他东西。名称“outlet”意味着它用于输出,例如在标签或文本字段中显示信息。这就是它被称为 IBOutlet 的原因。 (虽然您可以与 UIButton 建立 IBOutlet 连接,因此您可以执行启用/禁用按钮等操作。)
IBActions 是动词。它们告诉 UIControl 对象(如按钮)在事件发生时应该执行什么代码(操作方法)。名称中的“行动”一词是您记住这一点的助记符。
在您的情况下,您希望通过代码启用/禁用按钮。为此,您需要与它建立一个 IBOutlet 连接。
您需要在标题中定义 IBOutlet(代码中的插座是套接字,以继续立体类比),然后您需要将视图对象(立体组件)连接到 IBOutlet(套接字)。连接是电缆。如果您不进行连接,则 IBOutlet(套接字)是空的,并且没有连接到任何东西。 (电缆不见了。)
您可以进入 IB,选择您的故事板场景,选择您的按钮,然后显示“连接检查器”。它应该显示与您的视图控制器的 IBOutlet 连接。
或者,正如迈克尔建议的那样,您可以添加一条日志语句以在运行时检查插座连接是否良好。
这有帮助吗?
【讨论】:
以上是关于以编程方式禁用 UIButton [重复]的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式设置 UIButton 的 buttonType [重复]