2012-02-07 99 views
0

我是新來的子類,但我想要一個UILabel子類給標籤中的任何文本具有3像素大綱。從this page,我用這個方法:iOS - 在子類上訪問新屬性

- (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

我在我的代碼中做了同樣的事情。我創建了具有屬性的UILabel的子類,以設置邊框顏色和邊框寬度。

JKBorderedLabel.h

@interface JKBorderedLabel : UILabel 

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

@end 

JKBorderedLabel.m

​​

然後使用方法:

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

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

謝謝!我以爲我嘗試了類似的東西,但在其他類中,每當我鍵入「[myLabel」時,「setOutlineColor」選項都不會彈出。但是,我確實在Interface Builder中設置了該類,而不是通過代碼對其進行初始化。這可能是一個問題,你覺得呢? – achiral 2012-02-08 02:19:55

+0

這是可能的。我沒有嘗試過通過IB使用它,但假設對象的類被設置爲您的自定義類在身份檢查器中,我會認爲它應該工作。 – jonkroll 2012-02-08 02:34:36