更新
即使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_COLOR
(enabled
= YES)和grayColor
之间切换(enabled
= NO)。
问题:
到目前为止,代码以前工作正常。当textView中没有文本时它是灰色的,并且只要textView中有一些文本就会变为SEND_BUTTON_COLOR
。然而,突然之间,它已经停止了这种行为。会发生什么,它始终保持灰色,与textView的内容无关。按下后,它会变为SEND_BUTTON_COLOR
并保持这种状态,无论textView文本如何。
如何重新获得我曾在UIButton
上使用的按钮的行为?
答案 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
)来诊断问题(意外),它直接导致了问题的根源(子类代码)。评论出来了,瞧。事情恢复正常。
我希望这可以帮助将来遇到同样问题的人(或者犯同样的错误)。