2012-10-17 26 views
0

我有一个包含相当大的表单的应用程序。我将UILabel分类,以便在表单标签中保持一致性。然而,一些标签将会是带背景色的分节符,并且需要缩进。iOS:继承UILabel并更新其缩进

我知道我可以在乘坐UILabel的缩进设置时,它实例通过使用此代码:

- (void)drawTextInRect:(CGRect)rect { 
    UIEdgeInsets insets = {0, 5, 0, 5}; 
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
} 

但会增加插图到所有标签。不是我想要的。

所以我所做的就是写了一个自定义的方法:

- (void) makeInsets 
{ 
    CGRect rect = self.frame; 

    if (hasInset) { 
     UIEdgeInsets insets = {0, 5, 0, 5}; 
     return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
    } else { 
     UIEdgeInsets insets = {0, 0, 0, 0}; 
     return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
    } 
} 

问题与是的UILabel绘制后,它发生。我尝试了[UILabelSubclass setNeedsDisplay:YES],但得到setNeedsDisplay方法的“无可见接口”错误。有没有一种方法可以用我自定义的覆盖现有插图?

回答

1

既然你是继承它......你不能只是添加一个布尔属性来指示是否缩进?

.h文件中

@property BOOL indentText; 

.m文件

- (id) initWithIndent:(BOOL)indent { 

    if((self = [super init])) { 
     self.indentText = indent; 
    } 

    return self; 
} 

- (void)drawTextInRect:(CGRect)rect { 

    if(self.indentText) { 
     UIEdgeInsets insets = {0, 5, 0, 5}; 
     return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
    } 
} 

如果你在有很多定制的计划,那么你可以通过某种风格恒定,当你创建指示如何标记它的标签......但如果你打算做的是这样的话,那么我只需添加一个简单属性即可将其切换。

+0

我会给你所选的答案,因为我传递了布尔属性(hasInset),所以你提供的东西实际上更好地解决了我的问题。但其他用户确实回答了我的setNeedsDisplay问题。感谢您的推动。 – PruitIgoe

+0

是的,我想你既然已经子类化了UILabel ......为什么不只是调整你的代码,这样你就可以避免在外部调用setNeedsDisplay。现在你的视图代码会更具可读性:) – jerrylroberts

2

由于the method没有参数,因此您收到setNeedsDisplay的“无可见接口”错误。您应该只写:

[subclassedLabelInstance setNeedsDisplay]; 

并且该错误应该消失。它也可能解决问题。

+0

谢谢...这是一个错误。 :D – PruitIgoe