Iphone UILabel不';用按钮调暗
我有一个通过编程生成的UIButton,它带有一个label属性和一个背景图像。点击后,背景图像变为灰色,但文本不会变为灰色。如何使标签在被点击时也能显示 根据要求,我的按钮代码:Iphone UILabel不';用按钮调暗,iphone,ios,objective-c,uibutton,uilabel,Iphone,Ios,Objective C,Uibutton,Uilabel,我有一个通过编程生成的UIButton,它带有一个label属性和一个背景图像。点击后,背景图像变为灰色,但文本不会变为灰色。如何使标签在被点击时也能显示 根据要求,我的按钮代码: #import "BCB.h" @implementation BCB @synthesize cardText; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) {
#import "BCB.h"
@implementation BCB
@synthesize cardText;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
[self setFrame:frame];
cardText = cardText = [[MyLabel alloc]
initWithFrame:(CGRect){8, 8, 144, 186}];
cardText.numberOfLines = 0;
cardText.font = [UIFont fontWithName:@"Helvetica" size:18.0];
cardText.textColor = [UIColor whiteColor];
cardText.backgroundColor = [UIColor clearColor];
cardText.lineBreakMode = NSLineBreakByWordWrapping;
[self addSubview:cardText];
[self setBackgroundImage:[UIImage imageNamed:@"BC" ] forState:UIControlStateNormal];
}
return self;
}
@end
以及MyLabel代码:
#import "MyLabel.h"
@implementation MyLabel
// Helper function to actually set the text.
- (void)reallySetText:(NSString*)text
{
[super setText:text];
}
// Function to top align text within a label.
- (void)topAlign
{
// Get the size of the text box containing the label with its current font and size.
CGSize textSize = [self.text sizeWithFont:self.font
constrainedToSize:(CGSize){self.frame.size.width, self.frame.size.height}
lineBreakMode:NSLineBreakByWordWrapping];
// Trim the frame up to exactly fit the text.
self.frame = (CGRect){self.frame.origin.x, self.frame.origin.y, textSize.width, textSize.height};
}
// Shrink font until it fits the provided frame.
CGFloat maxSizeThatFitsFrame(MyLabel* labelCopy, CGFloat fontSize, CGRect rect)
{
while (labelCopy.frame.size.height > rect.size.height && fontSize > 4.0f)
{
fontSize -= 0.5f;
labelCopy.font = [UIFont fontWithName:@"Helvetica" size:fontSize];
[labelCopy topAlign];
}
return fontSize;
}
// Overloading the drawTextInRect method to topAlign the text as well.
-(void)drawTextInRect:(CGRect)rect
{
[super drawTextInRect:rect];
[self topAlign];
}
// Function to set the label to have the provided text within the provided rectangle with the provided initial font size.
- (void)setText:(NSString *)text inFrame:(CGRect)rect withFontSize:(CGFloat)fontSize andColor:(UIColor*)color
{
// Set the text.
[super setText:text];
// Set the frame.
[self setFrame:rect];
// Make a copy of the label.
MyLabel* labelCopy = [[MyLabel alloc]
initWithFrame:
(CGRect){
self.frame.origin.x,
self.frame.origin.y,
self.frame.size.width,
self.frame.size.height+240}];
// Make the text wrap properly.
labelCopy.numberOfLines = 0;
labelCopy.lineBreakMode = NSLineBreakByWordWrapping;
// Set the copy's text.
[labelCopy reallySetText:self.text];
// Set the copy's font.
labelCopy.font = [UIFont fontWithName:@"Helvetica" size:fontSize];
// Top align the copy.
[labelCopy topAlign];
// If the copy's height is larger than the rectangle's height, resize it until it fits.
if (labelCopy.frame.size.height > rect.size.height)
{
fontSize = maxSizeThatFitsFrame(labelCopy, fontSize, rect);
}
// Set the label's font to a size that fits.
[self setFont:[UIFont fontWithName:@"Helvetica" size:fontSize]];
// Set the label's color.
self.textColor = color;
// Make the text wrap properly.
self.numberOfLines = 0;
self.lineBreakMode = NSLineBreakByWordWrapping;
// Top align the label.
[self topAlign];
}
@end
调用
setTitleColor:forState:
以查看UIControlStateHighlighted
看看这两个类似的问题。他们肯定会解决您的问题:
这里有一件事可以尝试:
您可以为UIControlStateHighlighted
ui按钮的状态添加目标,如
[button addTarget:self action:@selector(buttonHighlighted:) forControlEvents:UIControlStateHighlighted];
在按钮高亮显示的方法中,您可以更改标签文本的颜色
- (void) buttonHighlighted:(id)sender
{
//code to change the color of your Label subview...
}
希望这有帮助当标题不是由[按钮设置标题:
设置时,此方法是否有效?