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? [复制]

以编程方式添加带有自动布局的uibutton

排队UIButton的CenterYAnchor到UIPageControl Swift

Xamarin.ios 基本控件

iphone uibutton:我想更改 UIControlStateNormal 图像