iOS UIButton、setEnabled 和 button.hidden 不起作用

Posted

技术标签:

【中文标题】iOS UIButton、setEnabled 和 button.hidden 不起作用【英文标题】:iOS UIButton, setEnabled and button.hidden not working 【发布时间】:2012-05-27 15:10:29 【问题描述】:

我已经尝试了我在 SO 上找到的所有答案,所以要么是我遇到了不同的问题,要么是我的大脑发热。

无论如何,我在故事板上有一个 UIButton,它链接到一个名为 _cameraButtonPress 的 IBAction(UIButton 称为 _cameraButton)。当按钮被按下时,我想暂时禁用按钮,所以我立即调用 [sender setEnabled:NO];这很好用。但是,在保存图像的不同功能中,成功保存时我使用 [_cameraButton.setEnabled:YES];这不起作用。

如果我在 IBAction 调用的函数中将 sender 替换为 _cameraButton,这也不起作用。我将 UIButton 与 IBOutlet 链接。

我可以发布代码,但现在这是一个相当大的项目,这里是相关的部分:

在标题中...

IBOutlet UIButton *_cameraButton;

IBAction...

- (IBAction) _cameraButtonPress:(id)sender 

[sender setEnabled:NO];  //stops button responding to touch events

在不同的功能中进一步说明:

 else 
    NSLog(@"colour image saved successfully");
    [_cameraButton setEnabled:YES];



有什么想法吗?

谢谢。

【问题讨论】:

作为测试,在 _cameraButtonPress 中添加一行代码:if(sender == _cameraButton) NSLog(@"Sender is _cameraButton") 如果没有,那么按钮没有正确链接,这就是你的问题。 是的,联动很好,日志显示_cameraButton是发送者。不过干杯: 您是否有多个按钮连接到_cameraButton? 不,只有一个链接。我真的被这个弄糊涂了。 【参考方案1】:

您确定您已将 _cameraButton 与 UIButton 连接吗?尝试记录 _cameraButton 以查看它是否包含对有效对象的引用。

NSLog(@"%@", _cameraButton);

【讨论】:

你好。是的,连接都很好。事实证明这个问题是我怀疑任何人都可以解决的问题,快速关闭并重新打开项目解决了它。所以我猜这是 Xcode 的一个怪癖。最近一直困扰着我很多。感谢您的帮助。【参考方案2】:

保罗的回答是最合乎逻辑的问题。

顺便说一句,下划线约定用于区分 ivars 和属性。因此,您将拥有类似(对于 ARC)的属性:

@property (nonatomic, weak) IBOutlet UIButton *cameraButton;

而且,如果您需要 ivar,您的 @synthesize 语句可以是:

@synthesize cameraButton = _cameraButton;

这可能与按钮的相关性不如其他属性,但良好的做法建议与声明的属性相关联的 ivars 使用下划线,而不是属性本身。

请参阅 Apple 的 Cocoa 编码指南中的 Naming Properties and Data Types。

【讨论】:

谢谢,出于某种我现在不记得的原因,我以下划线开头,但是是的,坚持惯例对我有好处。我会改变它们。

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

UIButton setEnabled 不起作用

UIButton 反复按下

禁用 UIButton

使 UIButtons 成为另一个对象的子对象

setEnabled() 和 setClickable() 的区别

IOS中UIButton和UIImageView的区别