UIButton setTitleColor forState 效果很好,而 setTitle 不行
Posted
技术标签:
【中文标题】UIButton setTitleColor forState 效果很好,而 setTitle 不行【英文标题】:UIButton setTitleColor forState works well, while setTitle does not 【发布时间】:2015-12-18 11:57:29 【问题描述】:从关于 SO 的问题中,我知道用setTitle ... forState
更改按钮标签文本是正确的:
[_capturing_button setTitle:@"take photo!" forState:UIControlStateNormal];
在我的代码中,在用户单击时我想禁用按钮并设置文本"processing"
,并在处理完成后启用按钮返回。
但是当禁用按钮时,文字消失了。
-(void) initCapturingButton
_capturing_button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
const int width = 150, height = 30;
_capturing_button.frame = CGRectMake( _main_view.frame.size.width / 2.0 - width / 2.0, 2, width, height );
_capturing_button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
[_capturing_button setTitle:@"take photo!" forState:UIControlStateNormal];
[_capturing_button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
//[_capturing_button setTitle:@"processing" forState:UIControlStateDisabled];
[_capturing_button setTitleColor:[UIColor purpleColor] forState:UIControlStateDisabled];
_capturing_button.enabled = YES;
[_capturing_button addTarget:self action:@selector(onCapturingButtonClick) forControlEvents:UIControlEventTouchUpInside];
[_topToolBar addSubview:_capturing_button];
点击按钮时,我只是禁用按钮:
-(void) onCapturingButtonClick
_capturing_button.enabled = NO;
当处理完成时,启用按钮返回:
-(void) processingFinished
_capturing_button.enabled = YES;
使用此代码,当应用程序处于处理模式时,按钮文本为紫色,当处于捕获模式时,颜色为白色。但是,如果我取消注释为禁用状态设置标题的行,文本就会消失。
我做错了什么?
【问题讨论】:
您是否尝试过设置断点并检查按钮的状态?您能否确认已设置标题文本,即使它没有在 UI 中显示? @fragilecat:是的,我试过了。状态为UIControlStateDisabled
,文本为“处理中”。
如果将代码行替换为 [_capturing_button setTitle:@"take photo!" 会发生什么情况forState:UIControlStateNormal];?
【参考方案1】:
由于您只是在 onCapturingButtonClick 方法中禁用而不更改按钮状态,因此您可以为 UIControlStateNormal 设置标题。
-(void) onCapturingButtonClick
[_capturing_button setTitle:@"processing" forState:UIControlStateNormal];
_capturing_button.enabled = NO;
然后在你的 processingFinished 方法中:
-(void) processingFinished
[_capturing_button setTitle:@"take photo!" forState:UIControlStateNormal];
_capturing_button.enabled = YES;
来自UIButton 类参考文档:
UIControlStateDisabled
控件的禁用状态。此状态表示控件当前 > 禁用。您可以通过 enabled 属性检索和设置此值。
【讨论】:
以上是关于UIButton setTitleColor forState 效果很好,而 setTitle 不行的主要内容,如果未能解决你的问题,请参考以下文章
UIButton setTitleColor forState 效果很好,而 setTitle 不行
UIButton setTitleColor 仅适用于预设组件值 ios7? [复制]