在启用/禁用状态下使用tintColor的UIButton的奇怪行为

时间:2014-08-07 06:16:43

标签: ios7 uibutton tintcolor

更新

即使UIBarButtonItem也没有视觉上对状态变化作出反应。

情景:

我的UIButton类型UIButtonTypeSystem初始化如下:

sendButton = [UIButton buttonWithType:UIButtonTypeSystem];

sendButton.backgroundColor = [UIColor clearColor];

[sendButton setTintColor:UIColorFromRGB(SEND_BUTTON_COLOR)];

sendButton.opaque = YES;

sendButton.clearsContextBeforeDrawing = NO;

sendButton.frame = CGRectMake(275, 6, 50, 35);

UIImage* sendImage = [UIImage imageNamed:@"toilet_paper"];

[sendButton setImage:[UIImage imageWithCGImage:sendImage.CGImage scale:sendImage.scale orientation:UIImageOrientationLeft]
            forState:UIControlStateNormal];

sendButton.enabled = NO;

[sendButton addTarget:self action:@selector(post) forControlEvents:UIControlEventTouchUpInside];

目的:

它与UITextView关联,如果enabled中有一些文字并且我的主机可用(通过可达性检查)并且textView,则设置为enabled使用以下内容在textViewDidChange:委托方法中更改了1}}属性:

sendButton.enabled = [APP_DELEGATE hostAvailable] && [myTextView.text stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \n"]].length > 0;

根据此enabled州,该按钮必须在SEND_BUTTON_COLORenabled = YES)和grayColor之间切换(enabled = NO)。

问题:

到目前为止,代码以前工作正常。当textView中没有文本时它是灰色的,并且只要textView中有一些文本就会变为SEND_BUTTON_COLOR。然而,突然之间,它已经停止了这种行为。会发生什么,它始终保持灰色,与textView的内容无关。按下后,它会变为SEND_BUTTON_COLOR并保持这种状态,无论textView文本如何。

如何重新获得我曾在UIButton上使用的按钮的行为?

2 个答案:

答案 0 :(得分:0)

您必须在textViewDidChange委托方法中再次设置按钮的色调颜色。

在您设置启用状态的代理中:

sendButton.enabled = [APP_DELEGATE hostAvailable] && [myTextView.text stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \n"]].length > 0;
if(sendButton.enabled){
  [sendButton setTintColor:UIColorFromRGB(SEND_BUTTON_COLOR)];
}
else{
    //Set Another Color For Disabled State
}

答案 1 :(得分:0)

看来,问题出在我身上。我在不同VC的.m文件中已经将UIButton子类化了(不是由相关VC导入的,或者是其导入的任何其他VC):

@implementation UIButton (Border)

- (void) setEnabled:(BOOL)enabled {

    if (enabled) {

        self.layer.borderColor = UIColorFromRGB(0x888888).CGColor;

    } else {

        self.layer.borderColor = UIColorFromRGB(0xdddddd).CGColor;
    }

    [super setEnabled:enabled];

    [self setNeedsDisplay];
}

@end

不知怎的,这干扰了我的按钮。经过数周的进一步子类化,更改图像,更改标题等,我能够通过跳转到CMD方法的定义(Click + enabled)来诊断问题(意外),它直接导致了问题的根源(子类代码)。评论出来了,瞧。事情恢复正常。

我希望这可以帮助将来遇到同样问题的人(或者犯同样的错误)。