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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章