iOS - доступ к новым свойствам в подклассе - PullRequest
0 голосов
/ 08 февраля 2012

Я новичок в подклассе, но я хотел, чтобы подкласс UILabel давал любому тексту внутри метки 3-пиксельный контур.Со страницы этой страницы я использовал этот метод:

- (void)drawTextInRect:(CGRect)rect 
{    
    CGSize shadowOffset = self.shadowOffset;   
    UIColor *textColor = self.textColor;    

    CGContextRef c = UIGraphicsGetCurrentContext();   

    CGContextSetLineWidth(c, 3);   
    CGContextSetLineJoin(c, kCGLineJoinRound);    
    CGContextSetTextDrawingMode(c, kCGTextStroke);   
    self.textColor = [UIColor whiteColor];   
    [super drawTextInRect:rect];    

    CGContextSetTextDrawingMode(c, kCGTextFill);   
    self.textColor = textColor;   

    self.shadowOffset = CGSizeMake(0, 0);   
    [super drawTextInRect:rect];    self.shadowOffset = shadowOffset;  
} 

Это прекрасно работает, и я могу изменить цвета, чтобы отобразить любой цвет, который я хотел бы как для текста, так и для контура.

Может кто-нибудь дать мне знать, как создать свойство с именем "outlineColor", которое позволит мне установить для этого подкласса любую метку, которую я хочу, и изменить цвет контура?

По сути, яЯ хотел бы иметь возможность установить класс метки на «CustomLabelClass», а затем в каком-то другом классе я хотел бы сказать что-то вроде:

[myLabel setOutlineColor:[UIColor whiteColor]];

Я не уверен, как это сделать.Спасибо.

1 Ответ

1 голос
/ 08 февраля 2012

Я сделал то же самое в моем коде. Я создал подкласс UILabel со свойствами для установки цвета границы и ширины границы.

JKBorderedLabel.h

@interface JKBorderedLabel : UILabel

@property (nonatomic, retain) UIColor *borderColor;
@property (nonatomic) NSInteger borderWidth;

@end

JKBorderedLabel.m

#import "JKBorderedLabel.h"

@implementation JKBorderedLabel

@synthesize borderColor = _borderColor;
@synthesize borderWidth = _borderWidth;

- (void)drawTextInRect:(CGRect)rect {

    CGSize shadowOffset = self.shadowOffset;
    UIColor *textColor = self.textColor;

    self.shadowOffset = CGSizeMake(0, 0);

    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(c, _borderWidth);
    CGContextSetLineJoin(c, kCGLineJoinRound);

    CGContextSetTextDrawingMode(c, kCGTextStroke);
    self.textColor = _borderColor;
    [super drawTextInRect:rect];

    CGContextSetTextDrawingMode(c, kCGTextFill);
    self.textColor = textColor;
    [super drawTextInRect:rect];

    self.shadowOffset = shadowOffset;
}

- (void)sizeToFit
{
    [super sizeToFit];

    self.frame = CGRectMake(self.frame.origin.x,
                               self.frame.origin.y - _borderWidth,
                               self.frame.size.width + (_borderWidth * 2),
                               self.frame.size.height);
}

@end

А потом использовать:

JKBorderedLabel *myLabel = [[JKBorderedLabel alloc] init];

myLabel.text = @"Hello World";
myLabel.textColor = [UIColor whiteColor];
myLabel.borderColor = [UIColor blueColor];
myLabel.borderWidth = 4;
[myLabel sizeToFit];
...